valores update una tabla off modificar insertar identity_insert ejemplos ejemplo datos como comando cambiar sql-server-2005 insert triggers

sql server 2005 - update - Insertar SQL desencadenar para actualizar los valores de la tabla INSERTADA



modificar valores de una tabla sql (3)

Debe actualizar la tabla de destino, no la tabla lógica. Sin embargo, te unes a la tabla lógica para averiguar qué filas actualizar:

UPDATE YourTable SET TheColumnToBeUpdated = ( SELECT TheValueCol FROM AnotherTable.ValueCol WHERE AnotherTable.ValudCol1 = INSERTED.ValueCol1 ) FROM YourTable Y JOIN Inserted I ON Y.Key = I.Key WHERE I.ValueCol IS NULL

Quiero crear un activador de inserción que actualice los valores en todas las filas insertadas si son nulas, los nuevos valores deben tomarse de una tabla diferente, de acuerdo con otra columna en la tabla insertada.

Lo intenté:

UPDATE INSERTED SET TheColumnToBeUpdated = ( SELECT TheValueCol FROM AnotherTable.ValueCol WHERE AnotherTable.ValudCol1 = INSERTED.ValueCol1 ) WHERE ValueCol IS NULL

Pero me sale este error:

Msg 286, Level 16, State 1, Procedure ThisTable_INSERT, Line 15 The logical tables INSERTED and DELETED cannot be updated.

¿Cómo debo hacer eso?


Podría cambiar el disparador a INSTEAD OF INSERT. Esto le permitirá verificar los valores entrantes y, si es necesario, reemplazarlos con los valores de su otra tabla.

CREATE TRIGGER CoolTrigger ON MyAwesomeTable INSTEAD OF INSERT AS BEGIN INSERT MyAwesomeTable (TheValueCol) SELECT ISNULL(INSERTED.TheValueCol, AnotherTable.TheValueCol) AS TheValueCol FROM INSERTED JOIN AnotherTable ON INSERTED.ValueCol1 = AnotherTable.ValueCol1 END

NOTA: los disparadores INSTEAD OF NO causan recursión.


insert into output (SELECT t1.ts - INTERVAL (SECOND(t1.ts)%10) SECOND, t1.ts - INTERVAL (SECOND(t1.ts)%10) SECOND + INTERVAL 10 SECOND ,sum(t1.data), FROM (select * from input where unix_timestamp(ts) >= unix_timestamp(''2000-01-01 00:00:10'') and unix_timestamp(ts) < unix_timestamp(''2000-01-01 00:01:20'') ) as t1 GROUP BY UNIX_TIMESTAMP(t1.ts) DIV 10 );

Aquí es de donde viene mi tabla de salida. Así que la inserción no es por valores.

Lo siento mucho pero no puedo acceder a mi cuenta desde aquí (oficina),