SQL Server Trigger 操作資料

April 18, 2025

操作資料 (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

參考資料