这是一个例子
UPDATE duration = datediff(ss, statustime, getdate()), statustime = getdate() where id = 2009
由于statustime在同一语句中被使用和分配,是否会为字段持续时间分配未定义的赋值?(即,如果首先处理了datediff,则为正值,如果首先处理statustime则为负值)
我绝对可以在两个单独的语句中更新它,但我很好奇它可以在一个语句中更新它.
不会.在进行任何分配之前计算这两个值.
更新:
我跟踪了ANSI-92规范,UPDATE语句中的第13.10节说明了这一点:
The
s are effectively evaluated for each row of T before updating any row of T.
唯一的其他适用规则是指第9.2节,但它只是单独处理一个赋值.
这里有一些模棱两可的空间:它可以先计算和更新所有statustime
行以及duration
之后的所有行,但仍然在技术上遵循规范,但这将是一种非常奇怪的方式来实现它.