Está en la página 1de 1

Hacer un procedure que reciba como parámetro un string y actualice la tabla de clientes

CREATE PROCEDURE xmlClientes


@XmlDocument nvarchar(1000)
AS
SET NOCOUNT ON
DECLARE @DocHandle int
EXEC sp_xml_preparedocument @DocHandle OUTPUT, @XmlDocument
DECLARE clientes_cursor CURSOR FOR
SELECT *
FROM OPENXML (@DocHandle, '/ROOT/clientes',1)
WITH (codcli int, nomcli varchar(100), email varchar(100), direccion varchar(200), status bit)

OPEN clientes_cursor
DECLARE @codigo_cliente int
DECLARE @nombre_cliente varchar(100)
DECLARE @email varchar(100)
DECLARE @direccion varchar(200)
DECLARE @status bit
FETCH NEXT FROM clientes_cursor INTO @codigo_cliente, @nombre_cliente, @email, @direccion, @status
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF EXISTS (SELECT codcli FROM clientes WHERE codcli=@codigo_cliente)
UPDATE clientes SET nomcli = @nombre_cliente, email = @email, direccion = @direccion, status = @status WHERE codcli = @codigo_cliente
ELSE
INSERT INTO clientes (codcli, nomcli, email, direccion, status) VALUES (@codigo_cliente, @nombre_cliente, @email, @direccion,
@status)
FETCH NEXT FROM clientes_cursor INTO @codigo_cliente, @nombre_cliente, @email, @direccion, @status
END
EXEC sp_xml_removedocument @DocHandle
CLOSE clientes_cursor
DEALLOCATE clientes_cursor
SELECT * FROM clientes ORDER BY codcli

Ejecutar procedimiento:
exec xmlClientes N'<ROOT>
<clientes codcli="11" nomcli="Cliente 1" email="cliente1@inventario.com" direccion="Santiago de los Caballeros" status="1"> </clientes>
<clientes codcli="12" nomcli="Cliente 2" email="cliente2@inventario.com" direccion="Santiago Rodriguez" status="1"> </clientes>
</ROOT>'

También podría gustarte