Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 引用列并在同一语句中更新它_Sql_Sql Server_Sql Server 2008 R2_Sql Update - Fatal编程技术网

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子句将其可视化:


谢谢你让我知道交换的事。谢谢你让我知道交换的事。