Échange de deux lignes dans MS SQLServer en conservant la clé primaire d'origine et sans mise à jour manuelle

StackOverflow https://stackoverflow.com/questions/484040

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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top