SQLServer觸發器的使用

2022-07-17 07:24:08 字數 3516 閱讀 1914

觸發器建立的**

create

trigger

tg_projectname

ontable1

after

update

asupdatetable2

set[

工程名]

=b.工程名

from

table2 a,inserted b

where

a.projid

=b.id

關於觸發器中inserted和deleted的解釋。

inserted觸發器語句中使用了兩種特殊的表: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表有資料(舊資料)

SqlServer觸發器的使用

首先 說明乙個觸發器使用的場景。1.伺服器0001上的employee表負責儲存公司所有員工的最新資料,新員工入職 員工更換部門以及員工離職等資訊都存在該表中。2.由於業務需求,公司新上了乙個oa系統,為了確保系統正常平穩執行且不影響公司其他伺服器,所以oa系統就部署在了0002伺服器上。3.oa系...

SQL Server觸發器的使用

1.定義 觸發器 trigger 是sql server 提供給程式設計師和資料分析員來保證資料完整性的一種方法,它是與表事件相關的特殊的儲存過程,它的執行不是由程式呼叫,也不是手工啟動,而是由事件來觸發,比如當對乙個表進行操作 insert,delete,update 時就會啟用它執行。觸發器經常...

Sql Server觸發器的使用

sql serefesqoxsver為每個觸發器都建立了兩個專用表 inserted表和deleted表。這兩個表由系統來維護,它們存在於記憶體中而不是資料庫中。這兩個表的結構總是與被該觸發器作用的表的結構相同,觸發器執行完成後,與該觸發器相關的這兩個表也被刪除。對錶的操作 inserted邏輯表 ...