SQL Server 2008:我可以暂时暂停异步触发器的执行吗?

时间:2011-02-06 16:26:45

标签: sql-server-2008 asynchronous triggers

有没有办法在SQL Server 2008中暂时禁止异步触发器的执行。我已经使用从队列中读取的队列和服务代理实现了触发器。因为,我想在这个服务器上执行一些繁重的查询,这些触发器会大大减慢操作 - 如何停止执行触发器,但是他们仍然进入队列以便稍后执行它们。

提前致谢!

3 个答案:

答案 0 :(得分:1)

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

使用激活更改队列QueueName(status = off);

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

  2. 激活队列:

  3. 使用激活更改队列QueueName(status = on);

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

答案 1 :(得分:0)

我们想出了什么:

首先:注释读取队列中消息的存储过程的主体。其他所有内容(触发器,队列等)都在运行。这样消息进入队列,但没有人从那里读取

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

第三步:以原始状态取消注释存储过程的主体

Forth:对队列执行禁用和启用操作后。现在,存储过程将开始从队列中读取。并且异步应用更改。

答案 2 :(得分:-1)

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

然而这意味着触发器永远不会为您输入的数据运行。如果您最终想要触发器发生的事情,您将不得不手动实现。请注意,这需要重复的逻辑,因此很容易弄乱它。使用适当的谨慎。