SQL:Exchange列值

时间:2010-02-03 07:55:24

标签: sql

想要清除有关SQL内部的一些概念。

假设我有一个表格:

---------tblXY-----------
X int
Y int

现在它的记录为:

X Y
---
1 4
2 3
3 2
4 1

我希望得到的表格是:

X Y
---
4 1
3 2
2 3
1 4

所以我把查询写成:

UPDATE tblXY   
 SET [X] = Y
 ,[Y] = X

并获得了所需的结果。

但是怎么回事?我的意思是我将X的值设置为Y的当前值,并且在此刻我将Y的值设置为X.

1 个答案:

答案 0 :(得分:5)

这是因为操作是单个原子操作 - 在完成任何任务之前,首先读取XY的当前值。

所以并非如此:

for every row:
    set x = y
    set y = x

但更像是:

for every row:
    set tmpx = x
    set tmpy = y
    set x = tmpy
    set y = tmpx

请记住,这只是概念视图。它可能会更有效率。

如果没有这个,你必须自己为每一行存储临时文件,或者只是重命名列: - )