colonne de mise à jour dans la table db

J'ai une colonne int id dont j'ai besoin pour effectuer une mise à jour de maintenance / correctif unique.

For example, currently the values look like this: 1 2 3 I need to make the following change: 1=3 2=1 3=2 

Y a-t-il un moyen de le faire dans une déclaration? Je continue d'imaginer que la mise à jour sera confuse si disons que le changement de 1 = 3 à se produit alors quand il s'agit de 3 = 2 il va changer ce 1 = 3 mise à jour à 3 = 2 qui donne

 Incorrectly: 2 1 2 

Si cela a du sens, la tige.

Qu'en est-il d'une déclaration de cas sql (quelque chose comme ça)?

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

Toutes les affectations dans une instruction UPDATE (à la fois les affectations dans la clause SET et les affectations sur des lignes individuelles) sont effectuées comme si elles se produisaient toutes simultanément.

Alors

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

(ou quelle que soit la bonne logique, puisque je ne peux pas déterminer quelle "direction" est nécessaire de la deuxième table) agirait correctement.

Vous pouvez même utiliser cette connaissance pour échanger la valeur de deux colonnes:

 UPDATE Table SET a=b,b=a 

échangera le contenu des colonnes, plutôt que (comme vous pouvez vous y attendre) se refind avec les deux colonnes définies à la même valeur.

C'est comme ça que je le fais habituellement

 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 

Dans le passé, j'ai fait ce genre de choses en créant une table temporaire (dont la structure est la même que la table cible) avec une colonne supplémentaire pour contenir la nouvelle valeur. Une fois que j'ai toutes les nouvelles valeurs, je vais les copyr dans la colonne cible de la table cible et supprimer la table temporaire.