標籤:
一、觸發器是一種特殊的預存程序,不能被顯式調用,只能在對錶進行insert、update、delete操作時被自動啟用。所以觸發器可以用來實現對錶進行複雜的完整性條件約束。
二、 Sql Server為每個觸發器都建立了兩個專用表:Inserted表和Deleted表。這兩個表由系統來維護,它們存在於記憶體中而不是資料庫中。這兩個表的結構總是與被該觸發器作用的表的結構相同,觸發器執行完成後,與該觸發器相關的這兩個表也被刪除。
|
對錶的操作 |
Inserted邏輯表 |
Deleted邏輯表 |
|
增加記錄(insert) |
存放增加的記錄 |
無 |
|
刪除記錄(delete) |
無 |
存放被刪除的記錄 |
|
修改記錄(update) |
存放更新後的記錄 |
存放更新前的記錄
|
陷阱:update觸發器只會被update觸發一次,無論更新的記錄數是多少
Alter TRIGGER dbo.tmp_table1_update ON tmp_table1 AFTER UPDATE AS SELECT * INTO #INS FROM INSERTED DECLARE @PersonCode VARCHAR(20),@Amount MONEY IF UPDATE(Amount) BEGIN DECLARE AmountCursor CURSOR FOR SELECT personcode,Amount FROM #INS OPEN AmountCursor FETCH NEXT FROM AmountCursor INTO @PersonCode,@Amount WHILE @@FETCH_STATUS=0 BEGIN UPDATE TMP_TABLE2 SET Amount =@Amount WHERE PersonCode=@PersonCode FETCH NEXT FROM AmountCursor INTO @PersonCode,@Amount END CLOSE AmountCursor DEALLOCATE AmountCursor END
觸發器存在的陷阱