Pasar una lista como parámetro en sql server

Preguntado hace 1 año

munchking

Editada hace 1 año

Javier Suero
Votos
PositivosNegativosTotal
2 0 2
76 Visualizaciones
Compártelo: Compártelo en twitterCompártelo en Facebook

Buenas, en una aplicación de gestión de facturas queremos hacer un procedimiento almacenado (en sqlserver 2008) al que le pasemos la cabecera de la factura y los detalles de esta, los detalles pueden ser uno o más de uno, más que nada para que sea todo en la misma transacción, sé que la transacción la podríamos manejar desde fuera pero nos parece peor solución y preferimos que esté todo centralizado, el problema es que no sabemos cómo podemos enviar una lista como parámetro de un procedmiento almacenado.

Saludos.

Actualizando datos
Hola, munchking, modifico para cambiar lista por listas en las etiquetas y así unificar etiquetas. Un saludo. Javier Suero hace 1 año

1 Respuesta

Hace 1 año

Fernando Calle
Votos
PositivosNegativosTotal
101

Hola, munchking, si fuera sql server 2005 la solución pasaría por crear un parámetro de tipo xml y parsearlo en el procedimiento almacenado, algo como esto:

create procedure spFactura
  @idCliente nvarchar(200),
  @valorTotal int,
  @detalles xml
as 
begin

   -- Supongo que primero insertarás la cabecera

   -- Orientación de cómo insertar los detalles
   insert into detallesTabla (idFactura, valor)
   select 
      cast(colx.query('data(idFactura)') as int) as idFactura,
      cast(colx.query('data(valor)') as int) as valor
   from @detalles.nodes('DocumentElement/Detalles') as TABX(COLX);

end

Puedes leer más de esto en http://www.codeproject.com/KB/database/DataTableAsXMLToDataBase.aspx

Siendo 2008, aún no lo he probado :S leo que puedes definirun tipo "tabla" con los campos que tú quieras y llenarlo desde .net 3.5, más información en http://sqldata.blogspot.com/2009/08/mejoras-en-t-sql-de-sql-server-2008-el.html

Saludos, Fernando.

Cerrar

Tu respuesta

Confirmación

Cerrar

Si sales ahora, perderás los cambios. ¿Estás seguro de querer salir?

Para participar en Babelias, debes estar convenientemente validado. Si ya eres usuario inicia sesión, si no lo eres, te puedes registrar.

Dar una respuesta

Trata de ser descriptivo, usa al menos 25 caracteres