SQL Server - Como insertar cabecera y detalle de transaccion

 
Vista:

Como insertar cabecera y detalle de transaccion

Publicado por Fredy Ayala (20 intervenciones) el 30/05/2012 17:36:42
Buenos dias,

Escribo para hacerles una consulta sobre la siguiente:

Tengo una tabla VENTA, a la que puse como PK el campo id_venta y es identity, ademas tengo la tabla VENTA_DETALLE, que tiene como FK el campo id_venta de tipo int y que hace referencia al mismo campo de la tabla VENTA.

Ahora bien, lo que no se como hacer para que cuando se genera el id_venta en la tabla VENTA, como recuperar para que este mismo valor pueda guardar en el detalle. Creo que si hago por aplicación va quedar mal.
En los foros me dijeron para guardar la cabecera de la venta y luego traer este dato a traves de una consulta (por ej. select max(id_venta) from venta) pero creo que si en caso de que otra terminal inserta registro en la base de datos al mismo tiempo, podria encontrarme con grandes problemas y ademas que no le veo eficiente.
Agradeceré infinitamente por la ayuda, muchas gracias, saludos cordiales

Fredy Ayala
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como insertar cabecera y detalle de transaccion

Publicado por Isaias (4558 intervenciones) el 31/05/2012 19:47:49
Insertas el cabecero, ya sea con IDENTITY (SELECT @MyID = SCOPE_IDENTITY()) y despues insertas detalle.

Es claro que aunque existan 1,000 insercciones de cabecero al mismo tiempo, con la funcion SCOPE_IDENTITY(), te dara solamente la que TU CONEXION, haya introducido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como insertar cabecera y detalle de transaccion

Publicado por Fredy Ayala (20 intervenciones) el 01/06/2012 07:10:43
Muchisimas gracias Isaias,

Estuve investigando asi tambien la funcion @@identity y creo se me aclaro la situacion.

Muchas gracias amigo, saludos cordiales.

Fredy
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como insertar cabecera y detalle de transaccion

Publicado por Isaias (4558 intervenciones) el 01/06/2012 17:51:43
No, el @@Identity, te da el ULTIMO identity que se haya ingresado a la base de datos, el SCOPE_IDENTITY, te da el ultimo ingresado, por la conexion que lo solicita, no confundir.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como insertar cabecera y detalle de transaccion

Publicado por Fredy (20 intervenciones) el 01/06/2012 17:58:11
Ante que nada quisiera agradecerte por la ayuda que me estas pasando.

Entendi amigo, o sea que si uso el @@IDENTITY corro el peligro en tomar el identity de otro usuario que haya insertado ultimo verdad.

Muchas gracias

Saludos
Fredy
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como insertar cabecera y detalle de transaccion

Publicado por Isaias (4558 intervenciones) el 01/06/2012 18:00:11
Es correcto, al utilizar @@Identity, podrias tomar el id que otro usuario haya insertado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como insertar cabecera y detalle de transaccion

Publicado por Fredy (20 intervenciones) el 01/06/2012 18:07:28
De lujo, demasiado me sirve tu ayuda amigo. Otra consultita, del lado del cliente uso visual foxpro 9.0, y vi que para pasar parametro de tipo tabla, se puede hacer enviando como xml, esto es eficiente en el sql server?

Otra consulta si no es molestia, quiero auditar las tablas de mi base de datos, creando otra tabla con idusuario, fecha, hora, cadena.inserted y cadena.deleted, para esto debo crear un trigger en cada tabla luego concatenar todos los campos del inserted y deleted y guardar en esta tabla. Hay otra,manera mas eficiente de hacer esto? El sql server no posee alguna funcion que haga el concatenado de campos, ya que habran tabla con muchos campos y seran engorroso concatenarlas.

Gracias por la ayuda

Saludos!
Fredy
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como insertar cabecera y detalle de transaccion

Publicado por Isaias (4558 intervenciones) el 01/06/2012 19:30:00
Si utilizas 2005 o superior, ya puedes enviar parametros de tipo TABLE, checalo en la documentacion.

Si vas a AUDITAR los cambios a tus tablas, solo arranca una traza (Profiler), ya que las auditorias no son permanentes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como insertar cabecera y detalle de transaccion

Publicado por FRedy (20 intervenciones) el 01/06/2012 20:32:04
Muchas gracias amigo.


Saludos
Fredy
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar