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

时间:2017-02-14 12:01:52

标签: sql-server tsql sql-update sql-server-2016

我有简单的表格:

<div id="logo-row">
    <ul>
        <li class="header-logo">AAA</li>
        <li><div id="button">BUTTON</div></li>
        <li>LINK</li>
    </ul>
</div>

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行执行后的值吗?

1 个答案:

答案 0 :(得分:3)

是。这些值不是按顺序更新,而是一次性更新。例如:

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。