SQL服务器中的奇怪更新执行顺序

时间:2015-10-01 06:49:49

标签: sql-server sql-server-2012

我正在使用SQL Server 2012及更高版本。对于奇怪的更新SQL Server执行如下

DECLARE @Variable1, @Variable2, @Variable3

UPDATE A
SET
A.COLUMN1 = @Variable1, -- Step 4
A.COLUMN2 = @Variable3, -- Step 5
.
.
.
@Variable1 = IIF(@Variable2 = 0, A.COLUMN3, A.COLUMN2), -- Step 1
@Variable2 = IIF((@Variable3 IS NULL OR A.COLUMN3 = @Variable3), 1, 0), -- Step 2
@Variable3 = A.COLUMN1, -- Step 3
.
.
.
FROM TABLE_NAME A

有没有办法通过强制改变执行步骤的顺序?

1 个答案:

答案 0 :(得分:3)

UPDATE语句中,SET子句中的所有赋值都将执行,就像它们全部在 parallel 中执行一样。因此,即使您所谓的执行顺序也是错误的。分配右侧的所有列都将始终反映UPDATE开始之前该列中保留的值。这导致了很好的技巧,例如:

UPDATE tab SET a = b, b = a

交换 ab列的内容。

如果您可以编辑问题以添加更多上下文,例如表格的现有内容以及您尝试要实现的内容,我可以编辑我的答案并提出具体建议解决问题。