Sql 引用列并在同一语句中更新它
我有一个表,我需要将一个值从一列移动到另一列,然后在原始列中设置一个新值Sql 引用列并在同一语句中更新它,sql,sql-server,sql-server-2008-r2,sql-update,Sql,Sql Server,Sql Server 2008 R2,Sql Update,我有一个表,我需要将一个值从一列移动到另一列,然后在原始列中设置一个新值 declare @foo table (A int, B int); insert into @Foo select 1, 0; update @Foo set B = A, A = 2; 更新后,B是否总是包含1,或者这是一种不确定的行为,由于a首先更新,它有时会有一个值2,而我的所有测试都没有达到使其为2的正确条件 作为一个后续问题,如果答案是B将始终是1,如果我做了以下操作,我仍然会得到相同的结果吗 u
declare @foo table (A int, B int);
insert into @Foo select 1, 0;
update @Foo
set B = A,
A = 2;
更新后,B是否总是包含1,或者这是一种不确定的行为,由于a首先更新,它有时会有一个值2,而我的所有测试都没有达到使其为2的正确条件
作为一个后续问题,如果答案是B将始终是1,如果我做了以下操作,我仍然会得到相同的结果吗
update @Foo
set A = 2,
B = A;
B将始终包含1,并且条款的顺序没有区别。从概念上讲,这些操作同时发生
下面的代码在SQL中也可以用来交换两个值,而不需要任何中间变量
update @Foo
set A = B,
B = A;
B将始终包含1,并且条款的顺序没有区别。从概念上讲,这些操作同时发生
下面的代码在SQL中也可以用来交换两个值,而不需要任何中间变量
update @Foo
set A = B,
B = A;
在执行更新时,SQL Server保留行的两个版本。旧的被删除,新的被插入。赋值本身仅修改插入的行。所有分配都使用删除行中的相同变量值。任务的顺序无关紧要
您可以使用output子句将其可视化:
在执行更新时,SQL Server保留行的两个版本。旧的被删除,新的被插入。赋值本身仅修改插入的行。所有分配都使用删除行中的相同变量值。任务的顺序无关紧要
您可以使用output子句将其可视化:
谢谢你让我知道交换的事。谢谢你让我知道交换的事。