0
我有兩個服務,我想保持同步在數據庫表中,所以如果service1更新table1,那麼我想更新table2。如果service2更新table2,那麼我想更新table1。在一個表上寫入觸發器1更新表2和觸發器在表2上更新表格1
我可以在table1上寫一個觸發器來更新table2,並再次在table2上觸發一個更新table1?這會創建一個循環嗎?
我有兩個服務,我想保持同步在數據庫表中,所以如果service1更新table1,那麼我想更新table2。如果service2更新table2,那麼我想更新table1。在一個表上寫入觸發器1更新表2和觸發器在表2上更新表格1
我可以在table1上寫一個觸發器來更新table2,並再次在table2上觸發一個更新table1?這會創建一個循環嗎?
我可以在table1上寫觸發器來更新table2,再次在table2上觸發 來更新table1?這會創建一個循環嗎?
這取決於服務器選項nested triggers
的
nested triggers
選項控制是否AFTER觸發器可以 級聯。也就是說,執行一個動作來啓動另一個觸發器, 啓動另一個觸發器,依此類推。當嵌套觸發器 設置爲0時,AFTER觸發器不能級聯。 當嵌套觸發器設置爲 爲1(默認值)時,AFTER觸發器可級聯多達32個 級別。不管 這個選項的設置如何,可以嵌套INSTEAD OF觸發器。
但你能避免級聯反正作爲第一個語句在觸發器編寫這些代碼:
IF TRIGGER_NESTLEVEL() > 1 RETURN;
有沒有辦法,除非你創建隱藏了兩個表的可更新視圖來一個觸發鏈接到兩個表映射所有應用程序代碼以使用該視圖。但是這個解決方案只在你從頭開始開發新的應用程序時纔有用。 –
它似乎不是最好的設計 - 或者有1個表格,或者同時更新兩個表格。但是,如果你不能這樣做,那麼你可以在觸發器中添加一個檢查,只有當值不同時才更新,否則你可能會在循環中結束 – dbajtr