更新多个列时,列的更新顺序是什么?

What's the columns updating order when several columns are updated?

我有简单的table:

Col001
Col002
...
ColNNN
...
Col001_DateTimeModified
Col002_DateTimeModified
...
ColNNN_DateTimeModified

ColXXX保存值,ColNNN_DateTimeModified保存修改(插入或更新)值时对应的日期和时间。

更新一列的值时,将使用给定行的所有列值。我想更新修改时间列,只有当新的相应列被更新时。所以,我有:

UPDATE MyTable
SET Col001 = S.[Col001] 
   ,Col002 = S.[Col002]
   ,...
   ,Col001_DateTimeModified = IIF(Col001 = S.[Col001], Col001_DateTimeModified, GETUTCDATE())
   ,Col002_DateTimeModified = IIF(Col002 = S.[Col002], Col002_DateTimeModified, GETUTCDATE())
   ,...
FROM MyTable T
INNER JOIN NewData S
    ON T.[id] = S.[id]

我可以确定,当对行 Col001_DateTimeModified = IIF(Col001 = S.[Col001], Col001_DateTimeModified, GETUTCDATE()) 求值时,Col001 仍保留其原始值,而不是 Col001 = S.[Col001] 行执行后的值吗?

是的。这些值不是连续更新的,而是一次性更新的。示例:

create table #test (x int, y int, z int)

insert into #test values (1,2,3)

update #test
set y= x + z, z= iif(y=2,100,200)
where x=1

select * from #test

x   y   z
1   4   100

如果按顺序更新值,则 z 的值为 200。