2011-04-20 53 views
0

我正在使用具有可更新訂閱的事務複製。 當我添加這是選擇複製在出版商對我的表的一個更新的觸發器,我這個錯誤遇到:在事務複製中使用更新觸發器時遇到錯誤

Maximum stored procedure, function,trigger, 
or view nesting level exceeded(limit 32) 

我的觸發代碼

create trigger Isupdated 
    on tbl_worker 
    for update as 
     update tbl_worker SET 
      Isup=1 
     where id= (select id from inserted) 

有什麼不對?

回答

0

看起來你已經寫了recursive (aka nested) trigger

也許觸發器正在對錶進行更新,導致觸發器再次被觸發?

如果您發佈的代碼,這將有助於我們解釋到底是什麼問題。

+0

是我的觸發做一個update.because我需要複製前做我的記錄的更新。我在最後一個觸發器中添加了我的查詢,這是複製創建的,我的問題解決了。我做對了嗎? – 2011-04-20 12:08:18

+0

恩,好吧,聽起來好像你有多個觸發器被初始更新觸發,因此很可能你有間接遞歸。這可能是脆弱的代碼,有可能你會再次面對這個問題。如果可能的話,我會試着簡化你對觸發器的使用,因爲它聽起來像你的代碼現在太複雜了。 – 2011-04-20 12:47:30

+0

我的代碼並不複雜,我只是在更新觸發器中的某個字段中進行更新。我正在tbl_worker上進行復制。這是我的代碼:'創建觸發器更新爲tbl_worker isupdated更新爲tbl_worker設置Isup = 1其中id =(從插入選擇ID)' – 2011-04-20 19:22:37

0

http://www.sqlmonster.com/Uwe/Forum.aspx/sql-server-programming/4752/Maximum-stored-procedure-function-trigger-or-view

上述鏈接提供瞭解決方案,以觸發嵌套。當您已經有觸發器,然後複製添加另一個觸發器時,這可能非常有用。我喜歡這不僅僅是組合觸發器,因爲它不會強制您混合與功能相關的代碼和與複製相關的代碼。

綜上所述解決方案:

您可以通過使用sp_settriggerorder指定的觸發 訂單防止發生嵌套射擊,並添加以下檢查到 開始觸發設置火災首先要防止它被解僱 其他觸發:

CREATE TRIGGER .... IF TRIGGER_NESTLEVEL> 1 RETURN