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

Obl*_*ngo 3 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;
Run Code Online (Sandbox Code Playgroud)

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

好的,然后我尝试了:

DISABLE TRIGGER DatabaseEventsTrigger ON ALL SERVER;
Run Code Online (Sandbox Code Playgroud)
  • 同样的错误.

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

USE [secondDB]
GO
DISABLE TRIGGER DatabaseEventsTrigger ON DATABASE; 
Run Code Online (Sandbox Code Playgroud)

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

Luk*_*zda 7

使用动态SQL:

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

要么:

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