Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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 2008_Swap - Fatal编程技术网

SQL列交换行为

SQL列交换行为,sql,sql-server-2008,swap,Sql,Sql Server 2008,Swap,我使用以下语句交换表中的列值: UPDATE SwapTable SET ValueA=ValueB ,ValueB=ValueA 这是可行的,并且这些值确实被交换,这一点可以验证 然而,如果我们用其他语言来做这件事,我们最终会发现ValueA和ValueB都有相同的值 所以我的问题是为什么/如何在SQL中工作。您可以看到执行计划 从表中选择所有行并将其设置为行集。 打开交易 使用相应的行地址更新表引用的SwapTable,将从行集合读取的旧值更新为字段引用。 提交-完成更新。 你可以看

我使用以下语句交换表中的列值:

UPDATE SwapTable
SET ValueA=ValueB
   ,ValueB=ValueA
这是可行的,并且这些值确实被交换,这一点可以验证

然而,如果我们用其他语言来做这件事,我们最终会发现ValueA和ValueB都有相同的值


所以我的问题是为什么/如何在SQL中工作。

您可以看到执行计划

从表中选择所有行并将其设置为行集。 打开交易 使用相应的行地址更新表引用的SwapTable,将从行集合读取的旧值更新为字段引用。 提交-完成更新。
你可以看到执行计划

从表中选择所有行并将其设置为行集。 打开交易 使用相应的行地址更新表引用的SwapTable,将从行集合读取的旧值更新为字段引用。 提交-完成更新。
你把我的问题搞错了。我的问题是,如果ValueA=ValueB,那么当它尝试ValueB=ValueA时,两列应该具有相同的值,但实际上值是交换的。为什么?@SHAKIRSHABBIR,因为在提交之前没有任何改变。在您的第二个语句ValueB=ValueA中,使用了旧的未更改的值。是的,我的意思与valex完全相同。在您的语句ValueB=ValueA中,ValueB是字段referece-目标;不是值,ValueA来自行集合-实际值;不是目标。行集合在从表中取出后被冻结。在提交行前后都没有问题。你把我的问题搞错了。我的问题是,如果ValueA=ValueB,那么当它尝试ValueB=ValueA时,两列应该具有相同的值,但实际上值是交换的。为什么?@SHAKIRSHABBIR,因为在提交之前没有任何改变。在您的第二个语句ValueB=ValueA中,使用了旧的未更改的值。是的,我的意思与valex完全相同。在您的语句ValueB=ValueA中,ValueB是字段referece-目标;不是值,ValueA来自行集合-实际值;不是目标。行集合在从表中取出后被冻结。在提交行之前和之后都没有问题。