更新多个列时,列的更新顺序是什么?
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。
我有简单的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。