1. 程式人生 > >SQLSERVER觸發器之臨時表

SQLSERVER觸發器之臨時表

SQL觸發器中,系統自動會生成兩張臨時表,分別是deleted 和 inserted 它們是邏輯(概念)表。也可理解為是臨時表。

為方便理解,可以這麼來認為Inserted表和Deleted表的作用:Inserted表就是放新的記錄,Delete表就是放舊的記錄。並且,它們的表結構與原表是完全相同的。

1。當你插入時,要插入的記錄是新的,所以可以在Insert表中找到。

如:table1中本來就有N條記錄,但執行 insert into table1 value('1')   那麼,在table1的觸發器的  Inserted表中,有且僅有同樣一條記錄。
select * from Inserted ,結果為: 1 而不是table1的N+1條記錄。


2。當你更新時,要更新的記錄是新的,所以可以在Inserted表中找到,被更新的記錄是舊的,所以可以在Deleted表中找到。

如:有條記錄 1   要改為 2
select * from Deleted 的結果為1  select * from Inserted 的結果為2



3。當你刪除時,要刪除的記錄是舊的,所以可以在Deleted表中找到。

如:表中有1,2,3,4 四條記錄,刪除其中三條,則 select * from deleted 的結果為 1,2,3

----------------------------------------------矽谷動力上看到的-------------------------

順便說一下,當對某張表建立觸發器後,分3種情況討論

  1.插入操作(Insert)

  Inserted表有資料,Deleted表無資料

  2.刪除操作(Delete)

  Inserted表無資料,Deleted表有資料

  3.更新操作(Update)

  Inserted表有資料(新資料),Deleted表有資料(舊資料)