启用禁用触发器存储过程 SQL Server 2012 行为

问题描述 投票:0回答:2

我的问题很简单:如何在存储过程中启用和禁用触发器。

感谢古老的 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;

然后,当我删除查询的启用部分时,出于好奇,我刷新了表触发器。我发现它被禁用了。我的存储过程中的更新操作实际上执行了这段代码。

对我来说这很奇怪。我真的很想进一步了解为什么......

sql-server triggers sql-server-2012
2个回答
0
投票

您不能在存储过程的代码中使用

GO


0
投票

我认为在这种情况下你可以使用这样的东西

EXEC('ENABLE TRIGGER [SchemaName].[TriggerName] ON [SchemaName].[TableName]');

SP代码里面

© www.soinside.com 2019 - 2024. All rights reserved.