顺序更新语句

时间:2017-06-02 09:37:52

标签: sql tsql

在单个更新查询中使用多个SET时,如

update table set col1=value1,col2=col1

当相同的列在等号的左侧或右侧时,是否有一个执行顺序决定结果?到目前为止我已经测试过,似乎当一个列在equals的右边用作数据源时,它的值是在BEFORE中使用它在同一个更新语句中得到一个新值,通过在其他地方留下等号。

1 个答案:

答案 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

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

http://dba.fyicenter.com/faq/sql_server/Using_Old_Values_to_Define_New_Values_in_UPDATE_Statements.html

您可以假设一般情况下,SQL Server在UPDATE期间对表格进行某种锁定,并在整个UPDATE语句中使用旧值的快照。