国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

觸發器中的inserted表和deleted表介紹

2024-07-21 02:43:43
字體:
來源:轉載
供稿:網友

觸發器語句中使用了兩種特殊的表:deleted     表和     inserted     表。Microsoft®     SQL   Server   2000 自動創建和管理這些表。可以使用這兩個臨時的駐留內存的表測試某些數據修改的效果及設置觸發器操作的條件;然而,不能直接對表中的數據進行更改。  
   
    inserted     和     deleted     表主要用于觸發器中:    
   
    擴展表間引用完整性。  
   
    在以視圖為基礎的基表中插入或更新數據。  
   
    檢查錯誤并基于錯誤采取行動。  
    
    找到數據修改前后表狀態的差異,并基于此差異采取行動。    
    Deleted     表用于存儲     DELETE     和     UPDATE     語句所影響的行的復本。在執行     DELETE     或     UPDATE     語句時,行從觸發器表中刪除,并傳輸到     deleted     表中。Deleted     表和觸發器表通常沒有相同的行。  
   
    Inserted     表用于存儲     INSERT     和     UPDATE     語句所影響的行的副本。在一個插入或更新事務處理中,新建行被同時添加到     inserted     表和觸發器表中。Inserted     表中的行是觸發器表中新行的副本。  
   
    更新事務類似于在刪除之后執行插入;首先舊行被復制到     deleted     表中,然后新行被復制到觸發器表和     inserted     表中。  
   
    在設置觸發器條件時,應當為引發觸發器的操作恰當使用     inserted     和     deleted     表。雖然在測試     INSERT     時引用     deleted     表或在測試     DELETE     時引用     inserted     表不會引起任何錯誤,但是在這種情形下這些觸發器測試表中不會包含任何行。  
   
    說明       如果觸發器操作取決于一個數據修改所影響的行數,應該為多行數據修改(基于     SELECT     語句的     INSERT、DELETE     或     UPDATE)使用測試(如檢查     @@ROWCOUNT),然后采取相應的對策。  
   
   
    SQL     Server™     2000     不允許     AFTER     觸發器引用     inserted     和     deleted     表中的     text、ntext     或     image     列;然而,允許     INSTEAD     OF     觸發器引用這些列。有關更多信息,請參見     CREATE     TRIGGER。  
   
    在     INSTEAD     OF     觸發器中使用     inserted     和     deleted     表  
    傳遞到在表上定義的     INSTEAD     OF     觸發器的     inserted     和     deleted     表遵從與傳遞到     AFTER     觸發器的     inserted     和     deleted     表相同的規則。inserted     和     deleted     表的格式與在其上定義     INSTEAD     OF     觸發器的表的格式相同。inserted     和     deleted     表中的每一列都直接映射到基表中的列。    
   
    有關引用帶     INSTEAD     OF     觸發器的表的     INSERT     或     UPDATE     語句何時必須提供列值的規則與表沒有     INSTEAD     OF     觸發器時相同:    
    不能為計算列或具有     timestamp     數據類型的列指定值。    
    不能為具有     IDENTITY     屬性的列指定值,除非該列的     IDENTITY_INSERT     為     ON。當     IDENTITY_INSERT     為     ON     時,INSERT     語句必須提供一個值。    
    INSERT     語句必須為所有無     DEFAULT     約束的     NOT     NULL     列提供值。  
   
    對于除計算列、標識列或     timestamp     列以外的任何列,任何允許空值的列或具有     DEFAULT     定義的     NOT     NULL     列的值都是可選的。    
    當     INSERT、UPDATE     或     DELETE     語句引用具有     INSTEAD     OF     觸發器的視圖時,數據庫引擎將調用該觸發器,而不是對任何表采取任何直接操作。即使為視圖生成的     inserted     和     deleted     表中的信息格式與基表中的數據格式不同,該觸發器在生成執行基表中的請求操作所需的任何語句時,仍必須使用     inserted     和     deleted     表中的信息。  
   
    傳遞到在視圖上定義的     INSTEAD     OF     觸發器的     inserted     和     deleted     表格式與為該視圖定義的     SELECT     語句的選擇列表相匹配。例如:  
   
    CREATE     VIEW     EmployeeNames     (EmployeeID,     LName,     FName)  
    AS  
    SELECT     EmployeeID,     LastName,     FirstName  
    FROM     Northwind.dbo.Employees  
   
    視圖的結果集有三列:一個     int     列和兩個     nvarchar     列。傳遞到在視圖上定義的     INSTEAD     OF     觸發器的     inserted     和     deleted     表也具有名為     EmployeeID     的     int     列、名為     LName     的     nvarchar     列和名為     FName     的     nvarchar     列。  
   
    視圖的選擇列表還包含不直接映射到單個基表列的表達式。一些視圖表達式(如常量調用或函數調用)可能不引用任何列,這類表達式會被忽略。復雜的表達式會引用多列,但在     inserted     和     deleted     表中,每個插入的行僅有一個值。如果視圖中的簡單表達式引用具有復雜表達式的計算列,則這些簡單表達式也有同樣的問題。視圖上的     INSTEAD     OF     觸發器必須處理這些類型的表達式。有關更多信息,請參見視圖上     INSTEAD     OF     觸發器中的表達式和計算列。

順便說一下,當對某張表建立觸發器后,分3種情況討論
1.插入操作(Insert)
Inserted表有數據,Deleted表無數據

2.刪除操作(Delete)
Inserted表無數據,Deleted表有數據

3.更新操作(Update)
Inserted表有數據(新數據),Deleted表有數據(舊數據)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宣威市| 娄底市| 共和县| 雅江县| 满洲里市| 兴文县| 九寨沟县| 铁力市| 垫江县| 哈尔滨市| 营山县| 汾阳市| 平塘县| 大方县| 宁德市| 北票市| 桃园县| 独山县| 南京市| 德令哈市| 长沙县| 成安县| 平舆县| 弥渡县| 甘泉县| 龙游县| 湘潭县| 汉中市| 册亨县| 恩施市| 曲靖市| 云浮市| 宜昌市| 安福县| 海城市| 九龙县| 九龙县| 枝江市| 江安县| 阳朔县| 内乡县|