在单个更新查询中使用多个SET时,如
update table set col1=value1,col2=col1
当相同的列在等号的左侧或右侧时,是否有一个执行顺序决定结果?到目前为止我已经测试过,似乎当一个列在equals的右边用作数据源时,它的值是在BEFORE中使用它在同一个更新语句中得到一个新值,通过在其他地方留下等号。
答案 0 :(得分:3)
我相信SQL Server在执行UPDATE
时始终使用旧值。最好通过显示表格的一些示例数据来解释:
col1 | col2
1 | 3
2 | 8
3 | 10
update table set col1=value1,col2=col1
在此UPDATE
的末尾,表格应如下所示:
col1 | col2
value1 | 1
value1 | 2
value1 | 3
UPDATE
的这种行为是ANSI-92 SQL标准的一部分,因为这个SO问题讨论了:
<强> SQL UPDATE read column values before setting 强>
以下是另一个通过示例讨论此问题的链接:
您可以假设一般情况下,SQL Server在UPDATE
期间对表格进行某种锁定,并在整个UPDATE
语句中使用旧值的快照。