当前位置:  开发笔记 > 编程语言 > 正文

在一个UPDATE语句中使用和更新相同的字段会导致未定义的行为吗?

如何解决《在一个UPDATE语句中使用和更新相同的字段会导致未定义的行为吗?》经验,为你挑选了1个好方法。

这是一个例子

UPDATE duration = datediff(ss, statustime, getdate()), statustime = getdate() where id = 2009

由于statustime在同一语句中被使用和分配,是否会为字段持续时间分配未定义的赋值?(即,如果首先处理了datediff,则为正值,如果首先处理statustime则为负值)

我绝对可以在两个单独的语句中更新它,但我很好奇它可以在一个语句中更新它.



1> Joel Coehoor..:

不会.在进行任何分配之前计算这两个值.

更新:
我跟踪了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之后的所有行,但仍然在技术上遵循规范,但这将是一种非常奇怪的方式来实现它.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有