2016-11-08 137 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再次触发,依此类推。

相关问题