【发布时间】:2017-07-02 17:08:50
【问题描述】:
我有一张简单的桌子:
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] 行执行后的值?
【问题讨论】:
-
从您的角度来看,SQL Server 当时没有更新列。它将整个更新语句作为一个语句运行。
标签: sql-server tsql sql-update sql-server-2016