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

Insertar datos en cabecera y detalle llamando a un store procedure

Estas en el tema de Insertar datos en cabecera y detalle llamando a un store procedure en el foro de SQL Server en Foros del Web. Que hay weyes... yo por aquí descifrando donde está el botón para hacer un nuevo tema pero ya toy. Mi pregu es, como le hacen ...
  #1 (permalink)  
Antiguo 02/07/2007, 11:48
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años, 1 mes
Puntos: 47
Pregunta Insertar datos en cabecera y detalle llamando a un store procedure

Que hay weyes... yo por aquí descifrando donde está el botón para hacer un nuevo tema pero ya toy.

Mi pregu es, como le hacen para insertar cabecera y detalle (en las respectivas tablas de cabecera y detalle) en un store procedure.

He visto algunas aplicaciones que por ejemplo para insertar en una tabla el procedimiento tiene tantos parámetros como campos en la tabla, cosa que agarra el parámetro y hace el insert

Desde el código he visto que abren una conexión y hacen el insert de la cabecera, para insertar detalle se barren en datagrid y van generando los insert fila por fila.

Pero lo que necesito es llamar a un store procedure, enviarle la cabecera y el detalle y que me haga los insert respectivos, como le mando los parámetros. El detalle siempre varía, pueden ser uno, dos, tres registros

De que manera ustedes lo hacen?
  #2 (permalink)  
Antiguo 03/07/2007, 02:13
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
Re: Insertar datos en cabecera y detalle llamando a un store procedure

Como andas wey!
Pues si, yo lo hago con dos procedures, uno para la cabecera, y otro por cada línea.
El de la cabecera es algo así:
Código:
CREATE Procedure [dbo].[PEDIDOS_InsertarCabecera]
(
	@IDCliente		int,
	@Fecha			datetime,
	@Portes			money,
	@PortesIVA		money,
	@Estado			nvarchar(50),
	@IDPedido		int OUTPUT
)
AS
BEGIN
	INSERT INTO Pedidos (IDCliente, Fecha, Portes, PortesIVA, Estado)
	VALUES (@IDCliente, @Fecha, @Portes, @PortesIVA, @Estado)

	SELECT @IDPedido = @@Identity
END
Y este es el de las líneas:
Código:
CREATE Procedure [dbo].[PEDIDOS_InsertarLinea]
(
	@IDPedido	int,
	@CodigoProducto	nvarchar(15),
	@NombreProducto	nvarchar(50),
	@Cantidad	money,
	@PrecioUnidad	money,
	@Dto		money,
	@PorIVA		money,
	@PorREC		money
)
AS
BEGIN
	INSERT INTO LineasPedido
	(
		IDPedido,
		CodigoProducto,
		NombreProducto,
		Cantidad,
		PrecioUnidad,
		Dto,
		PorIVA,
		PorREC
	)
	VALUES
	(
		@IDPedido,
		@CodigoProducto,
		@NombreProducto,
		@Cantidad,
		@PrecioUnidad,
		@Dto,
		@PorIVA,
		@PorREC
	)
END
No se me ocurre que tipo de parámetro podrías pasarle, que englobe todas las líneas, y poder hacer todo esto desde un solo procedimiento. Existirá una estructura así en SQL Server que pueda ser utilizada como pararámetro?
Adeeeeeeeu
__________________
..:: moNTeZIon ::..
  #3 (permalink)  
Antiguo 03/07/2007, 08:31
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años, 1 mes
Puntos: 47
Re: Insertar datos en cabecera y detalle llamando a un store procedure

Que tal monte de zion, gracias por contestar.

La cosa es que de la forma como tu lo haces tienes que llamar a dos procedimientos, pero que pasa si el procedimiento donde insertas el detalle falla, la fregaste porque ya insertaste la cabecera. La idea es manejar la transaccionalidad en el procedimiento que por cierto no veo ningún BEGIN TRAN, COMMIT TRAN y no veo ningún IF @@error entonces ROLLBACK TRAN en tus procedimientos

Por eso mi idea es hacer uno solo, para tener un begin tran y un commit tran

En tu caso como haces para manejar los errores
  #4 (permalink)  
Antiguo 08/07/2007, 08:33
 
Fecha de Ingreso: julio-2007
Ubicación: Trujillo - Perú
Mensajes: 3
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Insertar datos en cabecera y detalle llamando a un store procedure

Hola:

Si pues es cierto lo que comentas no se manejan transacciones, pero de la forma que se planteó la solucion anterior, es decir tener dos procedimientos uno para registrar la cabecera y otro para ir registrando los detalles, me imagino que las transacciones la maneja desde la aplicación para asegurar la confiabilidad y consistencia de los datos, por ejemplo el objeto Connection de ADO tiene los métodos BeginTran, CommitTran, RollbackTran.

Pero SQL Server 2000, inlcuye el soporte para XML a través del cual podrías enviar un documento XML con datos para diferentes tablas, de esta forma se envia cabecera y uno o muchos detalles o tablas relacionadas, es un tema interesante...

Te doy un referencia de las palabras claves que debes buscar en los Libros en Pantalla de SQL Serve para que tengas un mayor alcance del tema:

- sp_xml_preparedocument
- sp_xml_removedocument
- OPENXML, esta funcion es muy importante pues con ella obtienes la estructura del documento XML.

Espero que pueda ayudarte.

Recibe un cordial saludo.
barOdy
  #5 (permalink)  
Antiguo 09/07/2007, 09:28
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años, 1 mes
Puntos: 47
Re: Insertar datos en cabecera y detalle llamando a un store procedure

Gracias por contestar.

Claaaro wey!! ya soy campeon para manejar xml. Lo que pasaba es que necesitaba determinar la manera de insertar cabecera y detalle a mi esposa para su proyecto de graduación y quería conocer otras alternativas, pero manejando la transaccionalidad desde el procedimiento y no desde .net

Lo que pasa es que el profesor chillón podía chillar ya que el proyecto no se lo hizo del manera como el les "enseño", para lo cual hay que barrerse el datagrid del detalle y formar sql dinámicos. Como comprenderán eso es wuacala.

Tocó hacerlo enviandole xml como parámetros a la base, de la manera como vos lo dices
  #6 (permalink)  
Antiguo 11/07/2007, 03:51
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
Re: Insertar datos en cabecera y detalle llamando a un store procedure

eeeeeeeeei !!!
Pues si, la transaccion en mi caso se encuentra en la propia aplicación que llama a los dos procedimientos.
Muy interesante lo de mandar el xml.
Nos vemos
__________________
..:: moNTeZIon ::..
  #7 (permalink)  
Antiguo 11/07/2007, 07:49
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años, 1 mes
Puntos: 47
Re: Insertar datos en cabecera y detalle llamando a un store procedure

Cita:
Iniciado por moNTeZIon Ver Mensaje
eeeeeeeeei !!!
Pues si, la transaccion en mi caso se encuentra en la propia aplicación que llama a los dos procedimientos.
Muy interesante lo de mandar el xml.
Nos vemos


Si gustas algún día de estos te enseño
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 09:23.