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),