1. 程式人生 > >SQL Server2012 學習之(十六) :觸發器的建立與使用

SQL Server2012 學習之(十六) :觸發器的建立與使用

接上篇部落格的內容,觸發器可以看作是一個特殊的儲存過程。本篇部落格主要關注DML和DDL觸發器對應的使用方法。1.觸發器的定義觸發器的定義如下圖。它與儲存過程的區別在於觸發器是被動呼叫的 ,即在滿足特定事件的情況下被執行,而儲存過程是在使用操作語句時主動進行呼叫。
觸發器大致分為兩種:DDL觸發器和DML觸發器,相對應的具體定義如下。
2.建立觸發器2.1建立INSERT觸發器INSERT觸發器是DML觸發器的一種,其語法格式如下。
以AdventureWorks2012中的Sales.Currency表為例,新建一個INSERT觸發器。新建查詢中輸入
create trigger T_addCurrencyNum   
on Sales.Currency    --在Sales.Currency表中新建觸發器
for insert    --規定觸發器種類為INSERT
as
update Sales.CurrencyRate set ModifiedDate=ModifiedDate+1    --在Currency表修改後,與該表相關的CurrencyRate表中ModifiedDate值加一

即可新建一個INSERT觸發器之後對該表進行資料新增。新增與刪除SQL資料可參考 插入與修改SQL資料在新建查詢中輸入
create trigger T_addCurrencyNum   
on Sales.Currency    --在Sales.Currency表中新建觸發器
for insert    --規定觸發器種類為INSERT
as
update Sales.CurrencyRate set ModifiedDate=ModifiedDate+1    --在Currency表修改後,與該表相關的CurrencyRate表中ModifiedDate值加一

即可2.2DELETE觸發器
同理,在對資料表進行刪除資料時,可以使用DELETE觸發器,在刪除資料後可以進行提示。仍以AdventureWorks2012中的Sales.Currency表為例,新建一個DELETE觸發器。新建查詢中輸入
create trigger T_deleteName
on Sales.Currency
for delete
as
select Name from deleted    --deleted是一個臨時表,用以儲存刪除的資料

即可新建一個DELETE觸發器,之後再進行資料的刪除即可進行訊息提示,新建查詢中輸入
delete from Sales.Currency where Name='CN'    --提示刪除‘CN’

即可2.3 UPDATE觸發器UPDATE可以看作是INSERT觸發器與DELETE觸發器的結合,在使用UPDATE時先進行DELETE,再進行INSERT在新建查詢中輸入
create trigger T_updateCode
on Sales.Currency
for update
as
if(update(CurrencyCode))    --如果對錶CurrencyCode進行修改
begin
       print 'you can not modify the CurrencyCode!'
       rollback transaction    --回滾操作,即對執行失敗的語句進行撤銷,返回原表
end
else
       print 'success!'

即可建立UPDATE觸發器此時將無法修改CurrencyCode列,在新建查詢中輸入
update Sales.Currency set CurrencyCode='SYJ' where Name='Kroon'

將會報錯,如下圖所示
3. DLL觸發器上述的DML觸發器是針對具體語句的觸發器,而DLL觸發器則是針對資料表級別的建立和修改設立的觸發器種類,其語法格式如下。
新建查詢中輸入
create trigger T_modTable
on database    --資料表級別
for drop_table,alter_table    --不允許drop,alter
as
       print 'you can not modify the database!'
       rollback

即可建立一個DLL觸發器,之後對AdventureWorks2012中的表進行刪除時將會報錯。巢狀觸發器和遞迴觸發器在視訊中未作過多講解,之後的專案設計中若有涉及,將會進行更新!