Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema con Stored Procedures

Estas en el tema de Problema con Stored Procedures en el foro de SQL Server en Foros del Web. Buenas tengo la siguiente situacion: deseo realizar un stored procedure que recibi en conjunto de datos, todavia no esta establecido como se va a pasar ...
  #1 (permalink)  
Antiguo 20/02/2008, 09:29
Avatar de JoseGCB  
Fecha de Ingreso: noviembre-2004
Ubicación: Caracas Venezuela
Mensajes: 91
Antigüedad: 19 años, 6 meses
Puntos: 0
Problema con Stored Procedures

Buenas
tengo la siguiente situacion: deseo realizar un stored procedure que recibi en conjunto de datos,
todavia no esta establecido como se va a pasar este conjunto de datos ya que es variable la cantidad (yo propongo un xml ya que no lo delimita la cantidad de parametros)
luego por cada registro deso hacer operaciones e insertar esa informacion en otra tabla

la pregunta es como hago para recorrer cada uno de los nodos de este xml y realizar las operaciones necesarias


si me pueden ayudar se lo agradezco

saludos a todos
__________________
:-D El peor error es no hacer nada
por pensar que es poco lo que se puede hacer..!!!
  #2 (permalink)  
Antiguo 20/02/2008, 10:00
Avatar de royrojas  
Fecha de Ingreso: diciembre-2004
Mensajes: 458
Antigüedad: 19 años, 4 meses
Puntos: 3
Re: Problema con Stored Procedures

El xml es una estructura y se podria comportar de la misma forma que tablas, a las cuales les puedes hacer selects.

mira este ejemplo:

Código:
DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
   <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
      <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
      <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
   </Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
   <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
      <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
   </Order>
</Customer>
</ROOT>'
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement that uses the OPENXML rowset provider.
SELECT    *
FROM       OPENXML (@idoc, '/ROOT/Customer',1)
            WITH (CustomerID  varchar(10),
                  ContactName varchar(20))
Tambien puedes hacer pruebas con la base de datos de pruebas AdventureWorks que SQL trae instalada.

Código:
SELECT Demographics
FROM   Sales.Store
__________________
roy rojas
Programación en Español: DotNetcr.com
  #3 (permalink)  
Antiguo 20/02/2008, 10:08
Avatar de JoseGCB  
Fecha de Ingreso: noviembre-2004
Ubicación: Caracas Venezuela
Mensajes: 91
Antigüedad: 19 años, 6 meses
Puntos: 0
Re: Problema con Stored Procedures

Gracias por responder
Ahora ya tengo los dos registro pero quiero hacer alguna manipulacion de los datos ejemplo
si CustomerID = LILAS quisiera insertar los datos en una tabla
si no hacer otra coso por ejemplo
__________________
:-D El peor error es no hacer nada
por pensar que es poco lo que se puede hacer..!!!
  #4 (permalink)  
Antiguo 20/02/2008, 10:21
Avatar de royrojas  
Fecha de Ingreso: diciembre-2004
Mensajes: 458
Antigüedad: 19 años, 4 meses
Puntos: 3
Re: Problema con Stored Procedures

Funciona igual a un select, como si fuera una tabla a la cual le haces select e insertas en otra tabla.

Código:
SELECT    *
FROM       OPENXML (@idoc, '/ROOT/Customer',1)
            WITH (CustomerID  varchar(10),
                  ContactName varchar(20)) 
WHERE CustomerID = 'LILAS' 

Código:
SELECT    CustomerID
FROM       OPENXML (@idoc, '/ROOT/Customer',1)
            WITH (CustomerID  varchar(10),
                  ContactName varchar(20)) 
WHERE CustomerID = 'LILAS' 

Ahora mira el mismo ejemplo que inserte los datos en una tabla temporal.

Código:
DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
   <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
      <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
      <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
   </Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
   <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
      <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
   </Order>
</Customer>
</ROOT>'
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

CREATE TABLE #TablaTemporal (CustomerID varchar(10), ContactName varchar(20))

INSERT INTO #TablaTemporal 
SELECT *
FROM       OPENXML (@idoc, '/ROOT/Customer',1)
            WITH (CustomerID  varchar(10),
                  ContactName varchar(20)) 
WHERE CustomerID = 'LILAS'

SELECT * FROM #TablaTemporal
__________________
roy rojas
Programación en Español: DotNetcr.com
  #5 (permalink)  
Antiguo 20/02/2008, 11:49
Avatar de JoseGCB  
Fecha de Ingreso: noviembre-2004
Ubicación: Caracas Venezuela
Mensajes: 91
Antigüedad: 19 años, 6 meses
Puntos: 0
Re: Problema con Stored Procedures

gracias ya lo probe y me da los resultados
ahora como hago para recorrer la tabla temporal registro por registro

gracias por la ayuda
__________________
:-D El peor error es no hacer nada
por pensar que es poco lo que se puede hacer..!!!
  #6 (permalink)  
Antiguo 20/02/2008, 13:47
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: Problema con Stored Procedures

puedes hacerlo ciclando el programa, obteniendon registro por registro en una variable por columna de la tabla temporal, y al final eliminando el registro recien recuperado, así hasta que la tabla temporal te quede vacía. Pero igual puedes encontrar otra solución.


Por otro lado, no olvides ejecuta al final un Exec sp_xml_removedocument @Idoc para que no se sature tu servidor


saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:14.