2011-01-14 10 views
1

Ich habe eine ID-Spalte, die ich ein einmaliges Wartung/Update durchführen muss.Aktualisierung Spalte in db-Tabelle

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

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

Gibt es eine Möglichkeit, dies in einer Aussage zu tun? Ich halte die Vorstellung, dass das Update verwirrt wird, wenn die Änderung sagt von 1 = 3 bis dann auftritt, wenn es um 3 = 2 kommt, wird es zu ändern, dass 1 = 3 Update 3 = 2, die

Incorrectly: 
2 
1 
2 

Wenn das gibt macht Sinn, Stab.

Antwort

1

Was ist mit einer SQL-Case-Anweisung (so etwas wie das)?

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

In der Vergangenheit habe ich so etwas getan, indem ich eine temporäre Tabelle (deren Struktur der Zieltabelle entspricht) mit einer zusätzlichen Spalte für den neuen Wert erstellt habe. Sobald ich alle neuen Werte habe, kopiere ich sie in die Zielspalte in der Zieltabelle und lösche die temporäre Tabelle.

2

Alle Zuordnungen innerhalb einer UPDATE-Anweisung (sowohl die Zuweisungen innerhalb der SET-Klausel als auch die Zuweisungen für einzelne Zeilen) werden so gemacht, als ob sie alle gleichzeitig aufgetreten wären. So

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

(oder was auch immer die richtige Logik ist, da kann ich nicht herausfinden, was „Richtung“ aus der zweiten Tabelle benötigt wird) würde richtig handeln.

Sie können auch dieses Wissen nutzen, um den Wert von zwei Spalten zu vertauschen:

UPDATE Table SET a=b,b=a 

den Inhalt der Spalten tauschen, anstatt mit den beiden auf den gleichen Satz Spalten am Ende (wie man erwarten könnte) Wert. Diese

1

ist, wie ich es normalerweise tun

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 
Verwandte Themen