mssql sqlserver 禁用触发器的方法分享(disable trigger)


摘要:
下文将分享使用sql脚本禁用触发器的方法,如下所示
实验环境:sql server 2008 R2


sql脚本禁用触发器可使用disable trigger 命令,
disable trigger命令可禁用数据库中所有触发器(DML触发器、DDL触发器)
下文将依次讲述:

disable trigger命令的用法:

disable trigger语法简介:
DISABLE TRIGGER {[schema_name.]trigger_name[,…n]|ALL}
ON{object_name|DATABASE|ALL SERVER}[;]
————————————————————-
参数说明:
schema_name:
触发器器所属的架构信息 
  trigger_name:
    触发器名称
ALL:
是否禁用作用域中所有触发器
object_name:
触发器所属作用域的表或视图的名称
DATABASE:
触发器所属作用域数据库
ALL SERVER:
触发器所属作用域所有服务器

注意事项:
默认情况下触发器创建后,将会自动启用触发器。
触发器被禁用后,还保存在数据库中,只是失去触发器的作用,我们可以通过enable trigger命令启动触发器
alter trigger(修改触发器命令)会使触发器自动被启用。
disable trigger必须拥有创建触发器的权限


disable trigger命令举例应用:

   create table test 
(keyId int)
go


CREATE TRIGGER denyDropAndAlterTable   
ON DATABASE   
FOR DROP_TABLE, ALTER_TABLE   
AS   
   PRINT '系统安全设置,禁止删除表和修改表'   
   ROLLBACK;  
GO  

drop table test 
go

if not exists
(
select null from sysobjects where xtype='u'
and name ='test '
)
begin
 print '1:不存在表test'
end
else
begin
 print '2:存在表test '
end
---禁用触发器
go
disable TRIGGER denyDropAndAlterTable ON DATABASE;  
GO  


---再次运行删除操作,系统提示删除成功
drop table test 
go

if not exists
(
select null from sysobjects where xtype='u'
and name ='test '
)
begin
 print '3:不存在表test'
end
else
begin
 print '4:存在表test '
end
go

drop TRIGGER denyDropAndAlterTable   
go

---例2: 禁止服务器上所有触发器
 DISABLE Trigger ALL ON ALL SERVER;  

相关阅读:
触发器的状态查看方法(启用还是禁用)