2016-05-05 9 views
1

以下のクエリを使用してテーブルデータ(1 => 3,2 => 1,3 => 2)をスワップしてテーブルデータを更新しようとしています。SQL Serverテーブル内の列の値を交換します

/* Temporarily set 1 to a dummy unused value of 11 
    so they are disambiguated from those set to 1 in the next step */ 
update <tablename> 
set id = 11 
where id = 1 

update <tablename> 
set id = 1 
where id = 2 

update <tablename> 
set id = 2 
where id = 3 

update <tablename> 
set id = 3 
where id = 11 

スクリプトを最適化できるかどうかわかりません。

+0

最後に混乱や更新を避けるために、11を偽の値として使用しました。 – Reddy

答えて

5

caseを使用できます。概念的には、操作は「一度に」実行されるため、順次アプローチの場合のように4番目のダミー値を使用する必要はありません。

UPDATE YourTable 
SET ID = CASE ID WHEN 1 THEN 3 
       WHEN 2 THEN 1 
       WHEN 3 THEN 2 
     END 
WHERE ID IN (1,2,3) 

変更IDは一般に不変であるため、珍しいですが。

+0

これは、1 => 11,2 => 1,3 => 2として更新されます。しかし、1 => 3が予想される。 – Reddy

+0

そして私は偽名として "ID"を使用しました。 – Reddy

+0

ああ、二重の更新は意図的だったのですか? –

関連する問題