2010-02-03 58 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 

請記住,這僅僅是概念圖。在封面之下它可能會更有效率。

沒有這一點,您必須自行爲每一行存儲臨時文件,或者重命名列:-)