2016-11-08 136 views
2

讓我儘量簡化問題...兩列更新彼此相同的表通過SQL Server上的觸發器2012

我有兩列(A和B)

在表格中的是更新的,B將不得不被更新(使用A的新值,從而進行一些計算) 當B被更新時,將不得不進行更新(用B的新值,從而進行一些計算)

我想寫一個觸發器來執行這個更新,但是恐怕這個情況會陷入無限循環,因爲每次更新時,它都會嘗試更新B;作爲B在更新,它會嘗試更新A等等...

任何建議?

謝謝!

+0

第三列中的標誌?如果從'EXTERNAL'有'UPDATE'ColA,那麼'FLAG = 1';如果從'EXTERNAL'更新ColB,然後'FLAG = 2';然後是一個進程如果'標記= 1更新ColB和設置標記= 0',如果'標記= 2更新ColA和設置標記= 0'這不是很漂亮,並且可能有更好的方法,但它首先想到的是 –

+0

@ user3240704我需要解決這個問題,而不會創建更多不必要的信息/列。我沒有考慮到這是一個替代方案,因爲這是一項與工作有關的任務......我想在一個個人/小型項目中這可能會很好。 我真的相信這可能只是使用觸發器本身的一些解決方法,但我無法找到解決方案。 感謝您的輸入! – Porkispin

+0

我需要時在生產環境中使用標誌和時間戳列。我感興趣的是如何克服這個沒有國旗,這個信息將是有價值的和最好的運氣 –

回答

0

msdn documentation有一個關於遞歸的部分。爲了您的使用情況間接遞歸適用:

遞歸觸發器 SQL Server還允許觸發器的遞歸調用時使用ALTER DATABASE 啓用RECURSIVE_TRIGGERS設置。遞歸觸發器允許以下類型的遞歸 的發生:

間接遞歸 間接遞歸,應用程序更新了表T1。這觸發了TR1,更新了表T2。在這種情況下, 觸發T2,然後觸發並更新表T1。

直接遞歸 使用直接遞歸,應用程序更新表T1。這觸發TR1,更新表T1。由於表T1 已更新,觸發TR1再次觸發,依此類推。

相關問題