SQL Server觸發器的禁用和啟用


1)ENABLE | DISABLE語句

語法(sql server 2008以上)

{ENABLE | DISABLE} TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL }  
ON { object_name | DATABASE | ALL SERVER } [ ; ]  

schema_name:觸發器所屬架構的名稱。schema_name不能指定DDL或登錄觸發器。

trigger_name:要啟用或禁用的觸發器的名稱。

ALL:指示啟用在ON子句作用域中定義的所有觸發器。(SQL Server在為合並復制發布的數據庫中創建觸發器。在已發布數據庫中指定ALL可禁用這些觸發器,這樣會中斷復制。在指定ALL之前,請驗證沒有為合並復制發布當前數據庫。)

object_name:是的名稱的表或試圖在其觸發DML trigger_name已創建以執行。

DATABASE:DDL觸發器,該值指示trigger_name已創建或修改與數據庫作用域執行。

ALL SERVER:DDL觸發器,該值指示trigger_name已創建或修改要執行與服務器作用域。ALL SERVER也適用於登錄觸發器。

示例

A.在表中啟用或禁用DML觸發器

禁用在表uAddress中創建的觸發器Address,然后再啟用它。

disable trigger person.uAddress on Person.Address;
go
enable trigger Person.uAddress on Person.Address;
go

B.啟用或禁用DDL觸發器

在數據庫范圍,禁用DDL觸發器safety,然后再啟用它。

disable trigger safety on database;
go
enable trigger safety on database;
go

C.啟用或禁用以同一作用域定義的所有觸發器

啟用或禁用在服務器作用域級別創建的所有的DDL觸發器。

enable trigger all on all server;
go
disable trigger all on all server;
go

2)ALTER TRIGGER語句

--禁用
alter table tablename disable trigger triggername;
--啟用
alter table tablename enable trigger triggername;
go

--禁用某張表上的所有觸發器
alter table tablename disable trigger all;
go
--啟用某張表上的所有觸發器
alter table tablename enable trigger all;

--禁用所有表上的所有觸發器
exec sp_msforeachtable 'alter table ? disable trigger all'
--啟用所有表上的所有觸發器
exec sp_msforeachtable 'alter table ? enable trigger all'

 

Permissions

若要啟用或禁用DML 觸發器,用戶必須至少對於創建觸發器所在的表或視圖擁有 ALTER 權限。

若要啟用或禁用具有服務器作用域 (ON ALL SERVER) 的 DDL 觸發器或登錄觸發器,用戶必須對服務器具有 CONTROL SERVER 權限。 若要啟用具有數據庫范圍 (ON DATABASE) 的 DDL 觸發器,用戶至少應在當前數據庫中擁有 ALTER ANY DATABASE DDL TRIGGER 權限。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM