2012-12-18 48 views
1

我用以下語句交換表中的列值:SQL列交換行爲

UPDATE SwapTable 
SET ValueA=ValueB 
    ,ValueB=ValueA 

這工作和值都被換,因爲可以通過這個SQL Fiddle進行驗證。

但是,如果我們在做這樣的事情(主要是任何)其他語言,我們最終會得到兩個ValueAValueB具有相同的值。

所以我的問題是爲什麼/如何在SQL中工作。

回答

4

你可以看到執行計劃。

  1. 選擇表中的所有行並將其設置爲行集。
  2. 打開事務
  3. 更新引用(SwapTable)與對應的行地址的表,從從行讀出的舊的值設定到字段引用
  4. 提交 - 完成更新。
+0

你有我的問題錯了。我的問題是,如果ValueA = ValueB,那麼當它嘗試ValueB = ValueA時,兩列應該具有相同的值,但實際上這些值是交換的。爲什麼? –

+0

@SHAKIRSHABBIR因爲沒有任何改變之前提交。在第二個語句中,ValueB = ValueA,使用舊的(不變的)值。 – valex

+0

是的,我的意思是和valex完全一樣。在您的聲明「ValueB = ValueA」中,ValueB是現場參考 - 目標;不是一個值,ValueA來自行集 - 實際值;不是目標。從表中取出後,行集被凍結。在提交行之前和之後完全沒有問題。 – tsohr