Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > SQL Server

Respuesta
 
Herramientas Desplegado
Antiguo 02-jul-2007, 11:48   #1 (permalink)
(Desactivado)
Developer9 Developer9
 
Avatar de Developer9
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.202
Enviar un mensaje por MSN a Developer9
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?
Developer9 está desconectado   Responder Citando
Antiguo 03-jul-2007, 02:13   #2 (permalink)
moNTeZIon ha deshabilitado el karma
 
Avatar de moNTeZIon
 
Fecha de Ingreso: enero-2005
Ubicación: CanFenosa Martorelles BCN
Mensajes: 1.298
Enviar un mensaje por Skype™ a moNTeZIon
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 ::..
moNTeZIon está desconectado   Responder Citando
Antiguo 03-jul-2007, 08:31   #3 (permalink)
(Desactivado)
Developer9 Developer9
 
Avatar de Developer9
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.202
Enviar un mensaje por MSN a Developer9
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
Developer9 está desconectado   Responder Citando
Antiguo 08-jul-2007, 08:33   #4 (permalink)
BarOdy no se puede cailificar en este momento
 
Fecha de Ingreso: julio-2007
Ubicación: Trujillo - Perú
Mensajes: 3
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
BarOdy está desconectado   Responder Citando
Antiguo 09-jul-2007, 09:28   #5 (permalink)
(Desactivado)
Developer9 Developer9
 
Avatar de Developer9
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.202
Enviar un mensaje por MSN a Developer9
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
Developer9 está desconectado   Responder Citando
Antiguo 11-jul-2007, 03:51   #6 (permalink)
moNTeZIon ha deshabilitado el karma
 
Avatar de moNTeZIon
 
Fecha de Ingreso: enero-2005
Ubicación: CanFenosa Martorelles BCN
Mensajes: 1.298
Enviar un mensaje por Skype™ a moNTeZIon
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 ::..
moNTeZIon está desconectado   Responder Citando
Antiguo 11-jul-2007, 07:49   #7 (permalink)
(Desactivado)
Developer9 Developer9
 
Avatar de Developer9
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.202
Enviar un mensaje por MSN a Developer9
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
Developer9 está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 01:55.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93