Actualización de varias tabla si modifican tabla

Tengo 9 tablas de países iguales en la misma base de datos. Necesito poder realizar un cambio en una sola tabla, sea: eliminación, modificación o creación, y que el cambio afecte automáticamente a las otras 8 tablas. Lo que trato es de hacer el cambio en una sola tabla y que este cambio afecte de forma automática las otras 8 tablas. Además, hay dos campos que solamente cuando se "ingresan nuevos registros a la tabla" deben grabarse en las demás de forma con datos diferentes. Me pueden

1 Respuesta

Respuesta
1
En mi opinión lo mejor es utilizar un trigger. Un trigger es una porción de código T-S
Gracias, eso sin duda es la que necesito. Pero, ¿alguna idea del código ejemplo?
Perdón pero se colgó la página. Tengo algunas preguntas antes de definir una solución.
1) ¿No te conviene unir la 9 tablas en una agreagando un campo país? Facilitaría las cosas
2) Tienes que prever que cuando se actualize cualquier tabla, ¿debas modificar las ocho restantes o es solo con la actualización de una tabla en particular?
3) La actualización de una o cualquier tabla es a nivel de registro o puede darse una actualización masiva, ¿esto acutalizacion de más de un registro al mismo tiempo?
Hernán
Gracias Hernán, respondo con el mismo número:
1. No, necesito que las 9 tablas semantengan cada una por separado.
2. La idea es que sólo se actualice una sola tabla (la se elija) y, siempre desde esta tabla, se actualicen las demás.
3. La actualización es registro a registro, el usuario por ejemplo: modifica un campo de la tabla, guarda los cambios y luego, debo actualizar las otras tablas. Esto se da porque se hace a nivel de aplicación y uno por uno. Nunca se da en forma masiva. Igual si borran un registro o agregan un registro.
Saludos, Francisco
--- Supongamos la existencia de las tablas T1 a T9 con igual estructura.
--- Lo que queremos lograr es que cada vez que hagamos insert, update
--- O delete sobre T1, modificar campos de las tablas T2 a T9.
--- Aclaración:
--- Que tablas son accesibles dentro de un trigger:
--- DELETED e INSERTED que tienen la misma estructura que la tabla
--- Sobre la que se esta operando
--- Ejemplo:
--- Si se hace INSERT sobre T1 dentro del trigger la tabla INSERTED
--- De igual estructura que T1 contendrá los registros insertados
--- Si se hace DELETE sobre T1 dentro del trigger la tabla DELETED
--- De igual estructura que T1 contendrá los registros borrados.
--- Si se hace UPDATE sobre T1 dentro del trigger la tabla DELETED
--- De igual estructura que T1 contendrá los registros borrados (con los valores
--- "viejos" y la tabla INSERTED contendrá los registros a insertar con los valores
--- "nuevos".
--- *****************************************************
--- *****************************************************
--- Ejemplo trigger activado por INSERT en T1
--- *****************************************************
--- *****************************************************
CREATE TRIGGER TR_Insertar_T1
ON <Nombre Base de datos>.T1
AFTER INSERT
AS
BEGIN
 --- Inserto en T2 a T9 el registro insertado en T1
 insert into T2 select * from INSERTED
 insert into T3 select * from INSERTED
 insert into T4 select * from INSERTED
 insert into T5 select * from INSERTED
 insert into T6 select * from INSERTED
 insert into T7 select * from INSERTED
 insert into T8 select * from INSERTED
 insert into T9 select * from INSERTED
END
--- *****************************************************
--- *****************************************************
--- Ejemplo trigger activado por DELETE en T1
--- *****************************************************
--- *****************************************************
CREATE TRIGGER TR_Borrar_T1
ON <Nombre Base de datos>.T1
AFTER DELETE
AS
BEGIN
 --- Borro en T2 a T9 el registro borrado en T1
 DELETE from T2 where T2.id in (select id from DELETED)
 DELETE from T3 where T3.id in (select id from DELETED)
 DELETE from T4 where T4.id in (select id from DELETED)
 DELETE from T5 where T5.id in (select id from DELETED)
 DELETE from T6 where T6.id in (select id from DELETED)
 DELETE from T7 where T7.id in (select id from DELETED)
 DELETE from T8 where T8.id in (select id from DELETED)
 DELETE from T9 where T9.id in (select id from DELETED)
END
--- *****************************************************
--- *****************************************************
--- Ejemplo trigger activado por UPDATE en T1
--- *****************************************************
--- *****************************************************
CREATE TRIGGER TR_Actualizar_T1
ON <Nombre Base de datos>.T1
AFTER UPDATE
AS
BEGIN
--- Supongamos que quiero guardar en el campo C2 de las tablas T2 a T9
--- el nuevo valor de C2 en la tabla T1
 UPDATE T2 set T2.C2=INSERTED.C2 FROM INSERTED where T2.id=INSERTED.id
 UPDATE T3 set T2.C2=INSERTED.C2 FROM INSERTED where T3.id=INSERTED.id
 UPDATE T4 set T2.C2=INSERTED.C2 FROM INSERTED where T4.id=INSERTED.id
 UPDATE T5 set T2.C2=INSERTED.C2 FROM INSERTED where T5.id=INSERTED.id
 UPDATE T6 set T2.C2=INSERTED.C2 FROM INSERTED where T6.id=INSERTED.id
 UPDATE T7 set T2.C2=INSERTED.C2 FROM INSERTED where T7.id=INSERTED.id
 UPDATE T8 set T2.C2=INSERTED.C2 FROM INSERTED where T8.id=INSERTED.id
 UPDATE T9 set T2.C2=INSERTED.C2 FROM INSERTED where T9.id=INSERTED.id
END

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas