argumentos varibles en sql 2005

23/02/2009 - 22:41 por flprincich | Informe spam
Hola grupo:
Tengo la siguiente necesidad:
implementar un endpoints en un server sql 2005 que implemente un sp
que reciba como argumento un documento xml (que en su extructura tenga
codigos de registros) es decir los codigos pueden ser 1 o miles.
yo necesito en el sp recorrer ese xml y hacer un select en una tabla,
asociada, y actualizar un campo cuando el tabla.nroREG xml.registroID

si tienen algun ejemplo les agradeceria, mi inconveniente esta en la
implementacion del stored, es decir recibir el xml y leerlo

seria algo asi
update tabla set campoBool=0 where tabla.nroreg in (select nroreg from
DocumentoXML)

es éste ultimo select del doc xml el que no se como escribir el
codigo agradeceria un ejemplo de ésto un ejemplo de un escenario
como el mio, creeria que ya alguien lo habra hecho


gracias y saludos desde corrientes, argentina
 

Leer las respuestas

#1 Alejandro Mesa
24/02/2009 - 01:13 | Informe spam
Pudieras pasar, al procedimiento, un parametro tipo XML y luego usar los
metodos nodes y value de este tipo de data.

Aca te pongo un ejemplo. La transaccion es para no salvar la actualizacion.

El sp espera una lista de id de ordenes, y luego incrementa en un 10 % el
campo "freight".

USE Northwind;
GO

CREATE PROCEDURE dbo.usp_p1
@x XML
AS
SET NOCOUNT ON;

UPDATE
oh
SET
oh.Freight = oh.Freight * 1.10
FROM
dbo.Orders AS oh
INNER JOIN
(
SELECT c.value('.', 'int') AS OrderID
FROM @x.nodes('Root/OrderID') AS t(c)
) AS t2
ON oh.OrderID = t2.OrderID;
GO

declare @myDoc xml

set @myDoc = '
<Root>
<OrderID>10250</OrderID>
<OrderID>10260</OrderID>
</Root>';

SELECT
oh.OrderID, oh.Freight
FROM
dbo.Orders AS oh
INNER JOIN
(
SELECT c.value('.', 'int') AS OrderID
FROM @myDoc.nodes('Root/OrderID') AS t(c)
) AS t2
ON oh.OrderID = t2.OrderID;

BEGIN TRANSACTION;

EXEC dbo.usp_p1 @myDoc;

SELECT
oh.OrderID, oh.Freight
FROM
dbo.Orders AS oh
INNER JOIN
(
SELECT c.value('.', 'int') AS OrderID
FROM @myDoc.nodes('Root/OrderID') AS t(c)
) AS t2
ON oh.OrderID = t2.OrderID;

ROLLBACK TRANSACTION;
GO

DROP PROCEDURE dbo.usp_p1;
GO


AMB



"flprincich" wrote:

Hola grupo:
Tengo la siguiente necesidad:
implementar un endpoints en un server sql 2005 que implemente un sp
que reciba como argumento un documento xml (que en su extructura tenga
codigos de registros) es decir los codigos pueden ser 1 o miles.
yo necesito en el sp recorrer ese xml y hacer un select en una tabla,
asociada, y actualizar un campo cuando el tabla.nroREG > xml.registroID

si tienen algun ejemplo les agradeceria, mi inconveniente esta en la
implementacion del stored, es decir recibir el xml y leerlo

seria algo asi
update tabla set campoBool=0 where tabla.nroreg in (select nroreg from
DocumentoXML)

es éste ultimo select del doc xml el que no se como escribir el
codigo agradeceria un ejemplo de ésto un ejemplo de un escenario
como el mio, creeria que ya alguien lo habra hecho


gracias y saludos desde corrientes, argentina

Preguntas similares