SQL Server执行DISABLE TRIGGER禁用触发器报错:目标表不在当前数据库
报错原因
DISABLE TRIGGER命令默认仅支持对当前数据库上下文内的对象执行操作,你执行命令时的当前工作数据库不是PTS,直接写三部分限定名的表在部分SQL Server版本中不被兼容识别。
解决方案
方案1:先切换数据库上下文再执行操作(全版本兼容,最稳妥)
首先切换到目标数据库,再执行禁用/启用命令:
-- 切换到PTS数据库 USE PTS; GO -- 禁用表所有触发器 DISABLE TRIGGER ALL ON [dbo].[cadResources]; GO
完成数据删除操作后,执行对应启用命令即可:
USE PTS; GO ENABLE TRIGGER ALL ON [dbo].[cadResources]; GO
方案2:无需切换数据库的跨库执行语法
若需要在其他数据库上下文直接操作,可以使用数据库限定语法:
-- 跨库禁用触发器 DISABLE TRIGGER ALL ON DATABASE::[PTS].[dbo].[cadResources]; GO -- 跨库启用触发器对应语法 ENABLE TRIGGER ALL ON DATABASE::[PTS].[dbo].[cadResources]; GO
注意事项
- 触发器禁用期间,所有对
cadResources表的增删改操作都不会触发对应触发器逻辑,若业务侧有依赖触发器的逻辑(比如数据同步、字段自动计算、操作日志记录等),建议在业务低峰期操作,避免产生脏数据 - 操作完成后可以执行下面的命令验证触发器状态是否正常:
USE PTS; GO SELECT name, is_disabled FROM sys.triggers WHERE parent_id = OBJECT_ID('dbo.cadResources');
返回结果中is_disabled字段值为0代表触发器已正常启用,为1代表仍处于禁用状态。
内容的提问来源于stack exchange,提问作者ZBay
相关产品推荐
相关产品推荐

