2011-02-06 73 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);

將爲隊列中的每個保留消息執行隊列存儲過程。