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

Ayuda con Insert

Estas en el tema de Ayuda con Insert en el foro de SQL Server en Foros del Web. Que tal bueno normalmente yo hago un insert asi insert into tabla1 (registro1,registro2,registro3) values (dato1,dato2,dato3) mi pregunta es como puedo hacer un registro a 3 ...
  #1 (permalink)  
Antiguo 30/12/2005, 09:47
 
Fecha de Ingreso: diciembre-2003
Mensajes: 595
Antigüedad: 20 años, 4 meses
Puntos: 1
Ayuda con Insert

Que tal bueno normalmente yo hago un insert asi

insert into tabla1 (registro1,registro2,registro3)
values (dato1,dato2,dato3)


mi pregunta es como puedo hacer un registro a 3 tablas a la vez
  #2 (permalink)  
Antiguo 30/12/2005, 11:26
 
Fecha de Ingreso: enero-2005
Ubicación: Benifaió (Valencia)
Mensajes: 319
Antigüedad: 19 años, 3 meses
Puntos: 0
Supongo que la mejor forma seria con 3 inserts, empezando por la tabla que sea "maestra" y luego sus "hijas", es decir con orden xD
  #3 (permalink)  
Antiguo 30/12/2005, 11:27
 
Fecha de Ingreso: diciembre-2003
Mensajes: 595
Antigüedad: 20 años, 4 meses
Puntos: 1
Cita:
Iniciado por fredy666
Supongo que la mejor forma seria con 3 inserts, empezando por la tabla que sea "maestra" y luego sus "hijas", es decir con orden xD
Osea como??
  #4 (permalink)  
Antiguo 30/12/2005, 14:47
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
BEGIN TRAN
insert into tabla1 (registro1,registro2,registro3)
values (dato1,dato2,dato3)
insert into tabla2 (registro1,registro2,registro3)
values (dato1,dato2,dato3)
insert into tabla3 (registro1,registro2,registro3)
values (dato1,dato2,dato3)
--ROLLBACK TRAN
COMMIT TRAN
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #5 (permalink)  
Antiguo 30/12/2005, 14:49
 
Fecha de Ingreso: diciembre-2003
Mensajes: 595
Antigüedad: 20 años, 4 meses
Puntos: 1
Cita:
Iniciado por Mithrandir
BEGIN TRAN
insert into tabla1 (registro1,registro2,registro3)
values (dato1,dato2,dato3)
insert into tabla2 (registro1,registro2,registro3)
values (dato1,dato2,dato3)
insert into tabla3 (registro1,registro2,registro3)
values (dato1,dato2,dato3)
--ROLLBACK TRAN
COMMIT TRAN

osea ya con los datos que necsito quedria asi:


BEGIN TRAN

insert into t_datos (t_datos.fecha_entrada,t_datos.nombre,t_datos.mone da,t_datos.caja,t_datos.cantidad)
values (getdate(),'pepe','Nacional',100,35000000)
insert into t_billetes (t_billetes.no_entrada,t_billetes.b_1000,t_billete s.b_500,t_billetes.b_200,t_billetes.b_100,t_billet es.b_50,t_billetes.b_20,t_billetes.picos,t_billete s.deteriorado,t_billetes.dolares,t_billetes.proces o,t_billetes.total,t_billetes.diferencia)
values (4,200000,5000,0,0,0,0,0,0,0,0,0,100)
insert into t_metalica (t_metalica.no_entrada,t_metalica.m_100,t_metalica .m_20,t_metalica.m_10,t_metalica.m_5,t_metalica.m_ 2,t_metalica.m_1,t_metalica.m_050,t_metalica.m_020 ,t_metalica.m_010,t_metalica.m_05,t_metalica.total _m,t_metalica.diferencia)
values (4,0,0,0,0,0,0,0,0,0,0,0,0)
COMMIT TRAN
  #6 (permalink)  
Antiguo 30/12/2005, 14:57
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
No entiendo prácticamente nada del enredo que aparece, pero la idea básica es usar una transacción con un commit o un rollback para terminar.

Solo necesitas lidiar con los posibles errores entre operaciones con su rollback correspondiente. La versión "quick n' dirty" es algo así:
Código:
BEGIN TRAN

insert into tabla1 (registro1,registro2,registro3)
values (dato1,dato2,dato3)
IF @@Error <> 0 ROLLBACK TRAN

insert into tabla2 (registro1,registro2,registro3)
values (dato1,dato2,dato3)
IF @@Error <> 0 ROLLBACK TRAN

insert into tabla3 (registro1,registro2,registro3)
values (dato1,dato2,dato3)
IF @@Error <> 0 ROLLBACK TRAN

COMMIT TRAN
PD. Si tu código está indentado y además lo metes en unos tags [ code ][ /code ] (sin los espacios) se digerirá mucho mejor.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #7 (permalink)  
Antiguo 30/12/2005, 16:12
 
Fecha de Ingreso: diciembre-2003
Mensajes: 595
Antigüedad: 20 años, 4 meses
Puntos: 1
Cita:
Iniciado por Mithrandir
No entiendo prácticamente nada del enredo que aparece, pero la idea básica es usar una transacción con un commit o un rollback para terminar.

Solo necesitas lidiar con los posibles errores entre operaciones con su rollback correspondiente. La versión "quick n' dirty" es algo así:
Código:
BEGIN TRAN

insert into tabla1 (registro1,registro2,registro3)
values (dato1,dato2,dato3)
IF @@Error <> 0 ROLLBACK TRAN

insert into tabla2 (registro1,registro2,registro3)
values (dato1,dato2,dato3)
IF @@Error <> 0 ROLLBACK TRAN

insert into tabla3 (registro1,registro2,registro3)
values (dato1,dato2,dato3)
IF @@Error <> 0 ROLLBACK TRAN

COMMIT TRAN
PD. Si tu código está indentado y además lo metes en unos tags [ code ][ /code ] (sin los espacios) se digerirá mucho mejor.


gracias por el codigo ua pregunta y no es lo mismo pero sin el BEGIN TRAN
y los if
  #8 (permalink)  
Antiguo 03/01/2006, 12:59
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
No, sin el begin tran no tienes transacciones. Si un insert funciona, pero el segundo falla, el tercero se intentará y probablemente también funcione, con lo que tendrás datos inválidos (2 de 3)

Con las transacciones si uno falla todos fallan, asi te aseguras de que siempre haya datos consistentes en tus tablas. (Lee sobre las propiedades ACID de las DBs)
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #9 (permalink)  
Antiguo 03/01/2006, 13:02
 
Fecha de Ingreso: diciembre-2003
Mensajes: 595
Antigüedad: 20 años, 4 meses
Puntos: 1
Cita:
Iniciado por Mithrandir
No, sin el begin tran no tienes transacciones. Si un insert funciona, pero el segundo falla, el tercero se intentará y probablemente también funcione, con lo que tendrás datos inválidos (2 de 3)

Con las transacciones si uno falla todos fallan, asi te aseguras de que siempre haya datos consistentes en tus tablas. (Lee sobre las propiedades ACID de las DBs)

OK amigo muchas gracias por tu aclaracion
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 17:08.