SQL Server觸發器使用方法


基本結構

[Tr_Name]為觸發器名稱,[Table_Name]為觸發器依附的表,FOR后面為觸發時機,AS后為觸發器主體,從BEGIN開始到END結束。

CREATE TRIGGER [dbo].[Tr_Name]
ON [dbo].[Table_Name]
FOR INSERT,UPDATE
AS

BEGIN
--DO SOMETHING
END

觸發時機

觸發器在何時生效?當[Table_Name]發生變化時生效,可選事件有:INSERT、UPDATE、DELETE;

可以多選,以逗號分隔,如:FOR INSERT,UPDATE

內存數據表:INSERTED與DELETED

INSERTED和DELETED是內存表,用於臨時存放數據,結構與當前表相同(即列名及類型相同)。

數據庫在更新、刪除數據之前,新數據存放於INSERTED,舊數據存放於DELETED。

INSERTED:即將INSERT、UPDATE的數據;

DELETED:被UPDATE、DELETE前的數據。

BEGIN
DECLARE @Status     INT
DECLARE @InterID     INT
SELECT @InterID = FInterID FROM DELETED
SELECT @Status = FStatus FROM INSERTED
--DO SOMETHING WITH @Status & @InterID
END

應用方法

在觸發器主體中,從內存中獲取有用的數據存放在變量中,在后續能發揮重要作用。

例如,獲取當前表的ID,后續更新其他表時可定位到與當前表相關的記錄,而達到排除無關記錄的目的。

又或者,在數據更新之前,先判斷數據的合法性、邏輯性,根據條件執行不同的任務,或拋出異常等等。

修改

把關鍵字CREATE改成ALTER即可。

注意:如果觸發器已經創建,不能對同一個觸發器重復執行CREATE命令。

刪除

可以直接DROP TRIGGER [Tr_Name],但是如果觸發器不存在時會報錯。

推薦的寫法是,先判斷觸發器是否存在,如果存在,刪除,否則跳過。

IF OBJECT_ID ('Tr_Name', 'TR') IS NOT NULL
    DROP TRIGGER Tr_Name

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM