Échange de deux lignes dans MS SQLServer en conservant la clé primaire d'origine et sans mise à jour manuelle
-
20-08-2019 - |
Question
J'ai le problème suivant: j'ai des lignes comme
ID CODE NAME .........
1 h1100h1 Cool example1 .........
2 h654441 Another cool1 .........
Je voudrais les échanger en conservant toutes les anciennes clés primaires et contraintes. Bien sûr, je peux facilement résoudre ce problème manuellement en mettant à jour les lignes. Je me demande si quelqu'un a une excellente solution à ce type de problème au lieu d'exécuter la commande de mise à jour manuellement. J'apprécie vraiment toutes les suggestions ou recommandations.
La solution
Je n'ai pas testé cela, mais je pense que cela fonctionnera. Je suppose que cet identifiant est une clé primaire à colonne unique. Si ce n’est pas le cas, vous devrez ajuster légèrement ce code pour gérer le PK.
UPDATE
T1
SET
column_1 = T2.column_1,
column_2 = T2.column_2,
...
FROM
dbo.My_Table T1
INNER JOIN dbo.My_Table T2 ON
T2.id =
CASE
WHEN T1.id = @id_1 THEN @id_2
WHEN T1.id = @id_2 THEN @id_1
ELSE NULL
END
WHERE
T1.id IN (@id_1, @id_2)
Autres conseils
rejoindre soi-même avec une mise à jour est votre seul pari sûr