觸發器的建立及相關知識

2021-09-05 18:13:33 字數 2710 閱讀 1744

1觸發器的建立,刪除和重新命名都可以通過sql語句或者企業管理器來進行。

觸發器是一種特殊的儲存過程,類似於事件函式,sql server允許為 insert、update、delete 建立觸發器,即當在表中插入、更新、刪除記錄時,觸發乙個或一系列 t-sql語句。

2複雜一點的觸發器應用

instead of

執行觸發器語句,但不執行觸發觸發器的 sql 語句,比如試圖刪除一條記錄時,將執行觸發器指定的語句,此時不再執行 delete 語句。例:

create trigger f

on tbl

instead of delete

asinsert into logs...

if update(列名)

檢查是否更新了某一列,用於 insert 或 update,不能用於 delete。例:

create trigger f

on tbl

for update

asif update(status) or update(title)

sql_statement --更新了 status 或 title 列

inserted、deleted

這是兩個虛擬表,inserted 儲存的是 insert 或 update 之後所影響的記錄形成的表,deleted 儲存的是 delete 或 update 之前所影響的記錄形成的表。例:

create trigger tbl_delete

on tbl

for delete

asdeclare @title varchar(200)

select @title=title from deleted

insert into logs(logcontent) values('刪除了 title 為:' + title + '的記錄')

說明:如果向 inserted 或 deleted 虛擬表中取字段型別為 text、image 的字段值時,所取得的值將會是 null。

3檢視當前資料庫中有那些觸發器

在查詢分析器中執行:

select * from sysobjects where xtype='tr'

sysobjects 儲存著資料庫的物件,其中 xtype 為 tr 的記錄即為觸發器物件。在 name 一列,我們可以看到觸發器名稱。

4檢視觸發器的內容

可以通過查詢分析器執行 exec sp_helptext '觸發器名稱'

將會以表的樣式顯示觸發器內容。

除了觸發器外,sp_helptext 還可以顯示 規則、預設值、未加密的儲存過程、使用者定義函式、檢視的文字

或者通過用企業管理器檢視

在表上點右鍵->「所有任務」->「管理觸發器」,選擇所要檢視的觸發器

5檢視觸發器的屬性

儲存過程 sp_helptrigger 用於檢視觸發器的屬性。

sp_helptrigger 有兩個引數:第乙個引數為表名;第二個為觸發器型別,為 char(6) 型別,可以是 insert、update、delete,如果省略則顯示指定表中所有型別觸發器的屬性。

exec sp_helptrigger tbl

6多個觸發器

觸發器的名稱不同,觸發事件相同(insert、update、delete),我們稱為多個觸發器。

多個觸發器之間的執行順序並不確定。

我個人認為應該避免使用多個觸發器,因為它不利於維護。

7觸發器的回滾

例如我們看到許多註冊系統在註冊後都不能更改使用者名稱,但這多半是由應用程式決定的, 如果直接開啟資料庫表進行更改,同樣可以更改其使用者名稱,在觸發器中利用回滾就可以巧妙地

實現無法更改使用者名稱。

use 資料庫名

gocreate trigger tr

on 表名

for update

asif update(username)

rollback tran

關鍵在最後兩句,其解釋為:如果更新了 username 列,就回滾事務。

8啟用和禁用觸發器

禁用:alter table 表名 disable trigger 觸發器名稱

啟用:alter table 表名 enable trigger 觸發器名稱

9不能在觸發器中使用的語句

觸發器中可以使用大多數 t-sql 語句,但如下一些語句是不能在觸發器中使用的。

1,create 語句,如:create database、create table、create index 等。

2,alter 語句,如:alter database、alter table、alter index 等。

3,drop 語句,如:drop database、drop table、drop index 等。

4,disk 語句,如:disk init、disk resize。

5,load 語句,如:load database、load log。

6,restore 語句,如:restore database、restore log。

7,reconfigure

8,說明:有人說不能用 truncate table 語句,其實是可以的。

觸發器及觸發器的作用

觸發器是一種用來保障參照完整性的特殊的儲存過程,它維護不同表中資料間關係的有關規則。當對指定的表進行某種特定操作 如 insert,delete或update 時,觸發器產生作用。觸發器可以呼叫儲存過程。建立觸發器的語法 create trigger owner.觸發器名 on owner.表名 f...

建立觸發器

視覺化資料庫工具 對於 microsoft sql server 資料庫,可以在 transact sql 中編寫觸發器,而對於 oracle 資料庫,則可以在 pl sql 中進行編寫。通過指定下列內容建立觸發器 建立觸發器 在 伺服器資源管理器 中,展開 表 資料夾。右擊要在其上建立觸發器的表名...

建立觸發器

create trigger trigger insert test1 on test2 after insert asbegin set nocount on added to prevent extra result sets from interfering with select state...