2011-02-06 74 views
0

有没有办法暂时抑制SQL Server 2008中异步触发器的执行。我已经实现了从队列中读取队列和服务代理的触发器。因为我想在这个服务器上执行一些大量的查询,这些触发器会大大减缓操作 - 我怎样才能停止触发器的执行,但是他们仍然会进入队列以便稍后执行它们。SQL Server 2008:我可以暂时暂停异步触发器的执行吗?

在此先感谢!

回答

0

这里我们想出了:

首先:评论存储过程,在队列中读取消息的身体。其他一切(触发器,队列等)正在运行。这样邮件进入队列,但没有人从那里读取

第二:做重举脚本。现在队列正在填充将在稍后执行的操作。

第三:取消对存储过程在其原始状态的体

第四:执行禁止和在队列中启用操作之后。现在存储过程将开始从队列中读取。并且这些更改是异步应用的。

-1

是的,DISABLE TRIGGER,当你完成启用触发器。有关文档,请参阅http://msdn.microsoft.com/en-us/library/ms189748.aspx

但是这意味着触发器将永远不会运行您输入的数据。如果您最终需要触发器发生的事情,则必须手动实现。请注意,这需要重复的逻辑,因此很容易搞砸了。使用适量的谨慎。

+0

不,我一定会希望稍后使用我修改的所有数据运行触发器。所以,禁用/启用触发器想要工作。此触发器中的逻辑过于繁重,我不想复制它。 – anthares 2011-02-06 17:08:21

1

注释掉存储过程然后禁用和启用队列的第一个答案应该可行。 我有类似的情况 - 插入更新触发器后的服务代理队列。 队列使用存储过程进行激活。 我做了以下(几乎相同的第一个答案,但我不注释掉存储过程主体): 1.停用队列:

与激活(状态= OFF)

ALTER队列QUEUENAME;

  1. 进行批量更新时,消息将保留在队列中。

  2. 激活队列:

    与激活

ALTER队列QUEUENAME(状态= ON);

将为队列中的每个保留消息执行队列存储过程。