理解T SQL 觸發器

2022-03-14 14:48:39 字數 1495 閱讀 9273

觸發器是一種響應特定事件的特殊型別的儲存過程。有兩種型別的觸發器:資料定義語言(ddl)和資料操作語言(dml)觸發器。

ddl能夠響應某種方式(create,alter,drop)修改資料庫結構時激發; dml是附加在特定表和檢視上的**。程式不能顯式呼叫觸發器,觸發器**是某種事件產生後被自動執行。ddl是sql server2005新增的功能。

使用觸發器能夠滿足資料庫操作的一些高階功能,其中包括:能夠強制引用的完整性,尤其是涉及到跨伺服器,複雜資料關係時;能夠建立審核跟蹤,跟蹤每一條記錄實際修改歷史;能夠跨表、跨資料庫進行check約束等。

1. 建立觸發器

建立觸發器的語法如下所示:

code

create

trigger

<

trigger

name

>on[

.]<

table

orview

name

>

[with encryption | execute as >] 

[not for replication]as

<

<

sql statements

>

|external name 

<

assembly method specifier

>

>

on:表示基於什麼物件建立觸發器。如果是after觸發器,則on子句的物件必須是乙個表,不能是檢視。

with encryption: 加密觸發器**

for|after: 決定由什麼型別的動作激發觸發器,包括delete、insert、update動作。for和after表明了dml 觸發器僅在觸發 sql 語句中指定的所有操作都已成功執行時才被激發。所有的引用級聯操作和約束檢查也必須在激發此觸發器之前成功完成。

instead of:這個功能可以用來對檢視進行delete、insert、update,動作的激發是在修改資料之前。for/after與instead of呼叫順序關係如圖所示:、

2. insert、delete、update觸發器

對於任何標記for/after insert的觸發器,無論何時,只要向表中插入新行,就會執行觸發器的**,對於每乙個插入的行,sql server會將行的內容儲存到乙個特殊的表中,表名稱為inserted,在觸發器的**內可以訪問這張表。

對於delete觸發器,sql server維護一張deleted表,在觸發器的生命週期內存在。

對於update觸發器,sql server沒有updated表,相反,它維護兩張表,分別是deleted與inserted表。sql server把每一行更新看作是,先刪除現在記錄,再插入乙個全新的記錄。

3.其它更高階的主題請參見《sql server 2005 高階程式設計》第13章。暫時略過不提。這裡只試舉幾個例子:

理解T SQL 觸發器

觸發器是一種響應特定事件的特殊型別的儲存過程。有兩種型別的觸發器 資料定義語言 ddl 和資料操作語言 dml 觸發器。ddl能夠響應某種方式 create,alter,drop 修改資料庫結構時激發 dml是附加在特定表和檢視上的 程式不能顯式呼叫觸發器,觸發器 是某種事件產生後被自動執行。ddl...

T SQL語句建立觸發器

create trigger 觸發器名 on 表或檢視 for after instead of 操作時機 insert,update,delete assql語句 例1 要求 在order test表建立insert觸發器,當向order test表插入一行,如果cust test表中對應 記錄s...

T SQL 語句(六) 觸發器操作

一 觸發器簡介 1 觸發器的功能 a 實現比約束更為複雜的資料約束 b 可以檢查 sql 所做的操作是否被允許 c 修改其他資料庫裡表的資料 d 可以一次呼叫多個儲存過程 e 傳送sql mail f 返回自定義錯誤資訊 g 修改原來要操作的 sql 語句 h 防止資料表結構更改或表被刪除 2 觸發...