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来自行集合-实际值;不是目标。行集合在从表中取出后被冻结。在提交行之前和之后都没有问题。