如何在程序中启用/禁用触发器?

时间:2015-09-02 11:52:30

标签: sql-server stored-procedures

我在MS SQL服务器上有两个数据库(firstDB和secondDB)。 在firstDB中有过程[dbo]。[MaintaineIndexes],在secondDB中有DatabaseEventsTrigger。

我想在运行[dbo]时禁用secondDB DatabaseEventsTrigger。[MaintaineIndexes]。

所以我尝试了:

ALTER PROCEDURE [dbo].[MaintaineIndexes] 
AS
BEGIN
DISABLE TRIGGER DatabaseEventsTrigger ON secondDB; 
...
ENABLE TRIGGER DatabaseEventsTrigger ON secondDB;
END;

当我正在运行程序时,我收到错误消息:"找不到对象" secondDB"因为它不存在或您没有权限。&#34 ;;

好的,然后我尝试了:

DISABLE TRIGGER DatabaseEventsTrigger ON ALL SERVER;
  • 同样的错误。

仅使用此命令禁用触发器:

USE [secondDB]
GO
DISABLE TRIGGER DatabaseEventsTrigger ON DATABASE; 

但我们无法使用" USE"在程序中!那么,在我的情况下如何启用/禁用触发器?

1 个答案:

答案 0 :(得分:6)

使用动态SQL:

ALTER PROCEDURE [dbo].[MaintaineIndexes] 
AS
BEGIN
   EXEC('DISABLE TRIGGER DatabaseEventsTrigger ON secondDB'); 
   ...
   EXEC('ENABLE TRIGGER DatabaseEventsTrigger ON secondDB');
END;

OR:

ALTER PROCEDURE [dbo].[MaintaineIndexes] 
AS
BEGIN
   EXEC('USE [secondDB]; DISABLE TRIGGER DatabaseEventsTrigger ON DATABASE;'); 
   ...
   EXEC('USE [secondDB]; ENABLE TRIGGER DatabaseEventsTrigger ON DATABASE;'); 
END;