Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在一个更新语句中使用和更新同一字段是否会导致未定义的行为?_Sql - Fatal编程技术网

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

Sql 在一个更新语句中使用和更新同一字段是否会导致未定义的行为?,sql,Sql,这里有一个例子 UPDATE duration = datediff(ss, statustime, getdate()), statustime = getdate() where id = 2009 由于statustime在同一语句中被使用和分配,字段持续时间是否将被分配一个未定义的赋值?(即,如果datediff先处理,则为正值;如果statustime先处理,则为负值) 我当然可以在两个单独的语句中更新它,但我很好奇在一个语句中更新它是可能的。我的直觉说“不”,但这取决于SQL实现、

这里有一个例子

UPDATE duration = datediff(ss, statustime, getdate()), statustime = getdate() where id = 2009
由于statustime在同一语句中被使用和分配,字段持续时间是否将被分配一个未定义的赋值?(即,如果datediff先处理,则为正值;如果statustime先处理,则为负值)


我当然可以在两个单独的语句中更新它,但我很好奇在一个语句中更新它是可能的。

我的直觉说“不”,但这取决于SQL实现、查询解析器等。在这种情况下,最好在服务器上运行一个快速实验(将其包装在事务中以防止其修改数据),并查看特定实现的行为。

我的直觉是“否”,但这取决于SQL实现、查询解析器等。在这种情况下,您最好在服务器上运行一个快速实验(将其包装在事务中以防止其修改数据),并查看特定实现的行为。

否。这两个值都是在进行任何一项分配之前计算的

更新:
我找到了,更新声明的第13.10节说:

针对每一行有效地评估s
更新任何一行T之前的T。

唯一其他适用的规则参考第9.2节,但该节仅单独处理一项任务


这里有一些模棱两可的地方:它可以首先计算和更新所有
statustime
行,然后再计算和更新所有
duration
行,并且在技术上仍然遵循规范,但这将是一个非常复杂的过程。。。古怪的实现它的方法。

否。两个值都是在进行任何一个赋值之前计算出来的

更新:
我找到了,更新声明的第13.10节说:

针对每一行有效地评估s
更新任何一行T之前的T。

唯一其他适用的规则参考第9.2节,但该节仅单独处理一项任务


这里有一些模棱两可的地方:它可以首先计算和更新所有
statustime
行,然后再计算和更新所有
duration
行,并且在技术上仍然遵循规范,但这将是一个非常复杂的过程。。。古怪的实现方法。

谢谢,这正是我发布此问题的原因,因为我在一台服务器上获得随机行为,在另一台机器上获得一致行为。谢谢,这正是我发布此问题的原因,因为我在一台服务器上获得随机行为,在另一台机器上获得一致行为。我很好奇,但是,如果数据像你发布的一样,基于同一行中的其他列,为什么不使用一个真正的计算列而不是这个呢?我很好奇,但是如果数据像你发布的一样,基于同一行中的其他列,为什么不使用一个真正的计算列而不是这个呢?