Modificar registro completo a otras tablas

En la pregunta anterior respondiste excelente sobre unos trigger de agregar, borrar y actualizar varias tablas mediante una sola. Pero tengo una pregunta: cómo puedo actualizar todo un registro mediante la tabla madre en una sola instrucción. Me explico, me pasaste el siguiente código:
--- *****************************************************
--- *****************************************************
--- 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
y todo está bien. Sin embargo, no quiero actualizar un campo de la tabla T2, ahora quiero actualizar todos los campos de T2 con todos los campos de T1, cómo lo hago? Con qué instruccion, no me funciona ninguna. Solicito tu ayuda.

1 Respuesta

Respuesta
1
No se si te entendí bien pero si vos quieres
Te cuento la condición "where T2.id=INSERTED.id" es para actualizar en T2 solo el registro donde T2. id=INSERTED. ID. Si eliminas este WHERE los campos C2 de TODOS LOS REGISTROS DE T2 se actualizaran segun el valor de INSERTED. C2.
Supongamos que tanto la tabla T1 como la tabla T2 tienen la misma estructura
Un reg de T1=id,Campo1,Campo2,....Campon
Un reg de T2=id,Campo1,Campo2,....Campon
Si queres modificar todo el registro de T2 (salvo el id que si es identidad no lo vas a poder actualizar) modifica el UPDATE a
UPDATE T2 set T2.C2=INSERTED.C2, T2.C3=INSERTED.C3, T2.C4=INSERTED.C4, .....T2.Cn=INSERTED.Cn FROM INSERTED where T2.id=INSERTED.idEsto copiara el registro entero de T1 actualizado a T2 solo donde el id coincida
Si pones
UPDATE T2 set T2.C2=INSERTED.C2, T2.C3=INSERTED.C3, T2.C4=INSERTED.C4, .....T2.Cn=INSERTED.Cn FROM INSERTED
sin WHERE TODA LA TABLA T2 estara compuesta por copias del registro de T1 actualizado.
Hernán gracias, sí me entendiste. Una aclaración: si debo insertar todo un registro en las demás tablas, pero sólo un campo (de todos los que inserto) debe ir con una constante por tabla diferente (ejemplo campo1='1' para tabla T1, campo1='2' para T2 y así sucesivamente), ¿cómo lo debería hacer?
la forma mas generica de la instruccion INSERT es
INSERT INTO <nombre de tabla>
<lista de campos separada por comas> VALUES
<lista de valores separado por comas>
Si queres insertar una constante en un campo el INSERT quedara algo asi como
INSERT INTO <nombre de tabla> <campo1,campo2,....campoN,.....,campoJ) values
<valor1,valor2,.....,'2',...,valorJ) Si la posicion de campoN en la lista de campos es igual a la posicion de '2' en la lista de valores en el campoN quedara almacenado el valor '2'

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas