有没有办法在SQL Server 2008中暂时禁止异步触发器的执行。我已经使用从队列中读取的队列和服务代理实现了触发器。因为,我想在这个服务器上执行一些繁重的查询,这些触发器会大大减慢操作 - 如何停止执行触发器,但是他们仍然进入队列以便稍后执行它们。
提前致谢!
答案 0 :(得分:1)
注释掉存储过程然后禁用和启用队列的第一个答案应该有效。 我有类似的情况 - 插入更新触发器后服务代理队列后面。 队列使用存储过程进行激活。 我做了以下(几乎与第一个答案相同,但我没有注释掉存储过程体): 1.停用队列:
使用激活更改队列QueueName(status = off);
批量更新,消息将保留在队列中。
激活队列:
使用激活更改队列QueueName(status = on);
将对队列中的每个保留消息执行队列存储过程。
答案 1 :(得分:0)
我们想出了什么:
首先:注释读取队列中消息的存储过程的主体。其他所有内容(触发器,队列等)都在运行。这样消息进入队列,但没有人从那里读取
第二:做繁重的脚本。现在,队列正在填充稍后将执行的操作。
第三步:以原始状态取消注释存储过程的主体
Forth:对队列执行禁用和启用操作后。现在,存储过程将开始从队列中读取。并且异步应用更改。
答案 2 :(得分:-1)
是的,禁用触发器,当你完成启用触发器时。有关文档,请参阅http://msdn.microsoft.com/en-us/library/ms189748.aspx。
然而这意味着触发器永远不会为您输入的数据运行。如果您最终想要触发器发生的事情,您将不得不手动实现。请注意,这需要重复的逻辑,因此很容易弄乱它。使用适当的谨慎。