我在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"在程序中!那么,在我的情况下如何启用/禁用触发器?
答案 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;