Sql 顺序更新语句

Sql 顺序更新语句,sql,tsql,Sql,Tsql,在单个更新查询上使用多个集时,如 update table set col1=value1,col2=col1 当同一列位于等号的左侧或右侧时,是否存在决定结果的执行顺序?就我到目前为止的测试而言,当一个列被用作等号的右边作为数据源时,它的值在同一个update语句中得到一个新值之前就被使用了,因为它位于其他地方等号的左边。我相信SQL Server在执行更新时总是使用旧值。最好通过显示表格的一些示例数据来解释这一点: col1 | col2 1 | 3 2 | 8 3 |

在单个更新查询上使用多个集时,如

update table set col1=value1,col2=col1

当同一列位于等号的左侧或右侧时,是否存在决定结果的执行顺序?就我到目前为止的测试而言,当一个列被用作等号的右边作为数据源时,它的值在同一个update语句中得到一个新值之前就被使用了,因为它位于其他地方等号的左边。

我相信SQL Server在执行
更新时总是使用旧值。最好通过显示表格的一些示例数据来解释这一点:

col1 | col2
1    | 3
2    | 8
3    | 10

update table set col1=value1,col2=col1
在本次
更新
结束时,表格应如下所示:

col1   | col2
value1 | 1
value1 | 2
value1 | 3
更新的这种行为是ANSI-92 SQL标准的一部分,正如这个问题所讨论的:

下面是另一个链接,通过一个示例讨论此问题:


您可以假设SQL Server通常在
更新期间对表进行某种锁定,并在整个
更新
语句中使用旧值的快照。

我的测试证实了这一点,但是,如果有一些文档来支持这一点,我更希望它。@GeorgeMenoutis我没有找到任何专门针对SQL Server的内容,但是
UPDATE
的这种行为是ANSI-92 SQL标准的一部分,SQL Server很可能严格遵守该标准。