SQL Server觸發器的禁用和啓用

1)ENABLE | DISABLE語句html

語法(sql server 2008以上)sql

{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已建立以執行。post

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

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

示例server

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

禁用在表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'

--查看約束
select name , is_disabled from sys.foreign_keys order by name

--啓用or禁用指定表全部外鍵約束   
alter table tbname  NOCHECK constraint all  
alter table tbname  CHECK constraint all

 

3)Permissions

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

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

 
 
相關文章
相關標籤/搜索