2010-02-03 55 views
2

想清除有关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的那一刻。

回答

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 

请记住,这仅仅是概念图。在封面之下它可能会更有效率。

没有这一点,您必须自行为每一行存储临时文件,或者重命名列:-)