挿入されたテーブルの別の列に従って、挿入されたすべての行の値がnullの場合、新しい値は別のテーブルから取得される必要がある場合、値を更新する挿入トリガーを作成します。
私は試した:
UPDATE INSERTED
SET TheColumnToBeUpdated =
(
SELECT TheValueCol FROM AnotherTable.ValueCol
WHERE AnotherTable.ValudCol1 = INSERTED.ValueCol1
)
WHERE ValueCol IS NULL
しかし、私はこのエラーを受け取ります:
Msg 286, Level 16, State 1, Procedure ThisTable_INSERT, Line 15
The logical tables INSERTED and DELETED cannot be updated.
どうすればいいですか?
論理テーブルではなく、宛先テーブルを更新する必要があります。ただし、論理テーブルと結合して、更新する行を特定します。
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
トリガーをINSTEAD OF INSERTに変更できます。これにより、着信値を確認し、必要に応じて他のテーブルの値に置き換えることができます。
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
注:INSTEAD OFトリガーは再帰を引き起こしません。
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 );
これが私の出力テーブルの出所です。したがって、挿入は値によるものではありません。
申し訳ありませんが、ここ(オフィス)からアカウントにアクセスできません。