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
若要启用或禁用DML 触发器,用户必须至少对于建立触发器所在的表或视图拥有 ALTER 权限。
若要启用或禁用具备服务器做用域 (ON ALL SERVER) 的 DDL 触发器或登陆触发器,用户必须对服务器具备 CONTROL SERVER 权限。 若要启用具备数据库范围 (ON DATABASE) 的 DDL 触发器,用户至少应在当前数据库中拥有 ALTER ANY DATABASE DDL TRIGGER 权限。