操作資料 (Data Manipulation Language, DML) 指的是 INSERT
, UPDATE
, DELETE
等語法。可以用 CREATE TRIGGER
建立 Trigger,可以用 AFTER
在動作後處理資料,或是用 INSTEAD OF
複寫原本的語法。插入/更新、刪除資料保留字是 inserted
, deleted
。
用法
如果只要處理一筆資料,可以用宣告變數的方式,例如下列編輯資料後記錄編輯日期的例子:
CREATE TRIGGER [TriggerName] ON DataTable
AFTER UPDATE, INSERT
AS
DECLARE @Id AS VARCHAR(6);
SELECT @Id FROM inserted
UPDATE DataTable
SET EditTime = GETDATE()
WHERE Id = @Id
GO
要留意的地方是,因為每次動作只會觸發一次 Trigger,如果一次更動多筆資料,且 Trigger 用宣告變數的方法更新資料,只會更新到一筆紀錄,而沒有處理 inserted, deleted 裡的所有資料。詳細資訊請參考 [SQL]Trigger 撰寫時要注意的小細節 - 五餅二魚工作室 - 點部落。
改寫後的程式如下:
CREATE TRIGGER [TriggerName] ON DataTable
AFTER UPDATE, INSERT
AS
UPDATE DataTable
SET EditTime = GETDATE()
WHERE Id IN (
SELECT Id FROM inserted
)
GO