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

Preguntas similare

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

Respuesta Responder a este mensaje
#2 Jose Mariano Alvarez
24/02/2009 - 05:16 | Informe spam
Tambien podrias intentar hacer el Stored procedure en CLR.

Asegurate de securizar bien el endpoint y/o controlar muy bien los
parametros que recibes para evitar inyeccion de codigo.



Saludos


Ing. Jose Mariano Alvarez
Microsoft MVP
SQLTotal Consulting

(Cambia los ceros por O y saca lo que sobra)

Este mensaje se proporciona tal como es, SIN GARANTIAS de ninguna clase. Por
favor tratar de indicar la versión de SQL y Service Pack. La inclusión de
(CREATE, INSERTS, etc.) para poder reproducir el problema también ayuda.










"Alejandro Mesa" wrote in message
news:
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

Respuesta Responder a este mensaje
#3 flprincich
24/02/2009 - 16:24 | Informe spam
On 24 feb, 01:16, "Jose Mariano Alvarez"
wrote:
Tambien podrias intentar hacer el Stored procedure en CLR.

Asegurate de securizar bien el endpoint y/o controlar muy bien los
parametros que recibes para evitar inyeccion de codigo.


Saludos


Ing. Jose Mariano Alvarez
Microsoft MVP
SQLTotal Consulting

(Cambia los ceros por O y saca lo que sobra)

Este mensaje se proporciona tal como es, SIN GARANTIAS de ninguna clase. Por
favor tratar de indicar la versión de SQL y Service Pack. La inclusión de
(CREATE, INSERTS, etc.) para poder reproducir el problema también ayuda.

"Alejandro Mesa" wrote in message

news:

> 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



mchas gracias Gente!!!!
buena vida para tods
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida