我的问题很简单:如何在存储过程中启用和禁用触发器。
感谢古老的 SO 社区,我现在有了解决方案。但是!
具体是什么行为以及为什么下面的方法在更新存储过程中不起作用?
BEGIN
GO
DISABLE TRIGGER DatabaseEventsTrigger ON DB;
...
GO
ENABLE TRIGGER DatabaseEventsTrigger ON DB;
END;
我还观察到,这实际上实时启用和禁用触发器,而我只是更新存储过程而不是执行它。然后不保存对过程所做的更改。
有人可以解释一下这种行为吗?
编辑:
我正在更新我的存储过程是这样的,但在结果窗口中我得到的是
Command(s) completed successfully.
而不是
(x) rows affected
BEGIN
GO
DISABLE TRIGGER DatabaseEventsTrigger ON DB;
go
--Run my update here where my conditions are met.
GO
ENABLE TRIGGER DatabaseEventsTrigger ON DB;
go
END;
然后,当我删除查询的启用部分时,出于好奇,我刷新了表触发器。我发现它被禁用了。我的存储过程中的更新操作实际上执行了这段代码。
对我来说这很奇怪。我真的很想进一步了解为什么......
您不能在存储过程的代码中使用
GO
。
我认为在这种情况下你可以使用这样的东西
EXEC('ENABLE TRIGGER [SchemaName].[TriggerName] ON [SchemaName].[TableName]');
SP代码里面