PDA

Ver la Versión Completa : INSERT multimple


MaMu
18-08-2008, 05:10:32
Tengo estas dos tablas:

TABLA1
=====
idtabla1pk
idtabla2
campo1
campo2

TABLA2
=====
idtabla2pk
campo1

Cómo se hace para hacer un INSERT simultaneamente en ambas tablas?
Tengo que cumplir con la condición de que TABLA1.idtabla2=TABLA1.idtabla1pk, por lo que TABLA2.idtabla2pk, tendría que tener el mismo valor.

Alguna idea?

Saludos y gracias

tcp_ip_es
18-08-2008, 12:58:31
¿Que BD utilizas? ...todo depende.... en principio no hay una orden que haga inserts múltiples en varias tablas.... pero tu puedes lanzar un insert y asociarle un trigger para que inserte en otra tabla, eso mediante programación en la propia bd, otra opción es mediante código en delphi, yo haría dos insert dentro de un try .. except con sus correspondientes begin y end transaction y en caso de fallo lanzar un rollback..... no se si estaré en lo cierto que los compis foreros se lancen a la piscina :D

MaMu
18-08-2008, 17:49:05
¿Que BD utilizas? ...todo depende.... en principio no hay una orden que haga inserts múltiples en varias tablas.... pero tu puedes lanzar un insert y asociarle un trigger para que inserte en otra tabla, eso mediante programación en la propia bd, otra opción es mediante código en delphi, yo haría dos insert dentro de un try .. except con sus correspondientes begin y end transaction y en caso de fallo lanzar un rollback..... no se si estaré en lo cierto que los compis foreros se lancen a la piscina :D

Bueno, yo lo hice encerrándo a los dos INSERT entre un try .. except, utilizo mySQL 5 (D7 y Zeos 6, este último en autocommit), de hecho, usaba mySQL 4.1, pero como desde la versión 5 han implementado los storeprocedures y los views, he decidido que no tiene sentido seguir usando la 4.1. Aún estoy analizando la implementación de SP, Triggers, etc., ya que intento cerrar la aplicación independientemente de la Base de Datos (la idea es hacerla compatible con MS-SQLServer/mySQL/Firebird).

Saludos

BlueSteel
18-08-2008, 18:02:05
Cuano he tenido que realizar un insert similar a lo que tu planteas lo he realizado de 2 formas...

una es utilizando trigger (desde SQL Server) y la otra es programandolo en Delphi...

Tambien he tenido que realizar la inserción masiva y lo realizo tambien programandolo desde delphi...

como los insert los realizao a traves de AdoQuery, lo que hago es realizar 2 AdoQuery. El primero me realiza el insert en la primera tabla y el segundo me realiza el insert en la segunda tabla.

Con el uso del Trigger es más cómodo y funcional, ya que a penas se detecta la inserción de un registro, se dispara un trigger que realizará lo que le diga, en este caso insertará un registro en otra tabla.

Al menos en SQL Server cuando se realizan inserciones de varios registros a la vez se hace necesario el uso de cursores, de lo contrario solo registrar la inserción de 1 registro (no se si será el primero que se inserto o el último).

Salu2:p:D