现在这是一个执行的有效语句,我观察到它执行了所需的操作。我的问题:在SQL Server的单个语句中执行此操作是否可靠?可靠,我的意思是Foo
在Bar
的值更改为Bar
之前将设置为null
的原始值。
update SomeTable
set Foo = Bar,
Bar = null
请注意,我在问一个关于SQL Server基本设计的问题。因此,我对超出观察范围的答案感兴趣,并且要么引用Microsoft(或旧的sybase)文档和/或令人信服地说明为什么SQL Server在低级基础级别以某种方式工作。
答案 0 :(得分:2)
是的,这将在SQL Server中按照您的意愿运行。在Bar设置为NULL之前,Foo将被设置为Bar。
编辑:来源 - http://dba.fyicenter.com/faq/sql_server/Importance_of_Column_Order_in_SET_Clause.html
答案 1 :(得分:1)
为了安全起见,我将此UPDATE拆分为两个单独的Update语句,并在一个事务中包装两个UPDATE语句。
我不认为您在SET子句中提及列的顺序决定首先更新哪个列。 因此,为了保持简单,我会做如下......
BEGIN TRANSACTION;
update SomeTable
set Foo = Bar
update SomeTable
set Bar = null
COMMIT TRANSACTION;
答案 2 :(得分:1)
SET
列顺序无关紧要。在更新期间,SQL Server正在维护该行的旧副本和该行的新副本。所有计算仅使用旧值完成。
您甚至可以执行此操作来交换两列中的值
update SomeTable
set Foo = Bar,
Bar = Foo