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
| |||
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 |
| |||
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 |
| ||||
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:
PD. Si tu código está indentado y además lo metes en unos tags [ code ][ /code ] (sin los espacios) se digerirá mucho mejor. 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
__________________ Friedrich Nietzsche |
| |||
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:
PD. Si tu código está indentado y además lo metes en unos tags [ code ][ /code ] (sin los espacios) se digerirá mucho mejor.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 gracias por el codigo ua pregunta y no es lo mismo pero sin el BEGIN TRAN y los if |
| ||||
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)
__________________ Friedrich Nietzsche |
| |||
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 |