2011-01-14 10 views
1

私は一度のメンテナンス/修正の更新を行うために必要なint idカラムを持っています。dbテーブルのカラムを更新

For example, currently the values look like this: 
1 
2 
3 

I need to make the following change: 
1=3 
2=1 
3=2 

1つのステートメントでこれを行う方法はありますか?私はそれはそれは1 = 3更新2 = 3にその場合は

Incorrectly: 
2 
1 
2 

を与えることを変更します= 2〜3になると、その後に発生する1 = 3からの変更を言うならば、更新が混乱することを想像し続けます意味があります、 ロッド。

答えて

1

のですか?

UPDATE table SET intID = CASE 
WHEN intID = 3 THEN 2 
WHEN intID = 1 THEN 3 
WHEN intID = 2 THEN 1 
END 
0

以前は、新しい値を保持する余分な列を持つ一時テーブル(その構造はターゲットテーブルと同じです)を作成することで、このようなことをしました。すべての新しい値を取得したら、それらをターゲット表のターゲット列にコピーし、一時表を削除します。

2

UPDATEステートメント内のすべての割り当て(SET句内の割り当てと個々の行の割り当ての両方)は、すべてが同時に発生したかのように行われます。

ので

UPDATE Table Set ID = ((ID + 1) % 3) + 1 

(またはものは何でも私は2番目のテーブルから必要なもの「方向」うまくいかないことができるので、右ロジックは、ある)が正しく作用するであろう。 (ご想像のとおり)のではなく、列の内容を入れ替えると同じに設定し、両方の列になってしまいます

UPDATE Table SET a=b,b=a 

あなたも、2列の値を交換するためにこの知識を使用することができます値。

1

これは、SQL case文(このようなもの)について、私は通常、それを行う方法

DECLARE @Update Table (@oldvalue int, @newvalue int) 

INSERT INTO @Update Values (1,3) 
INSERT INTO @Update Values (2,1) 
INSERT INTO @Update Values (3,2) 

Update Table 
SET 
    yourField = NewValue 
FROM 
    table t 
    INNER JOIN @Update 
    on t.yourField = @update.oldvalue 
関連する問題