Intercambiando dos filas en MS SQLServer conservando la clave primaria original y sin actualización manual

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

Pregunta

Tengo el siguiente problema: tengo filas como

ID   CODE     NAME            .........
1    h1100h1  Cool example1   .........
2    h654441  Another cool1   .........

Me gustaría intercambiarlos conservando todas las claves y restricciones primarias antiguas. Por supuesto, puedo resolver esto fácilmente manualmente actualizando las filas. Me pregunto si alguien tiene una solución excelente para este tipo de problema en lugar de simplemente ejecutar el comando de actualización manualmente. Realmente aprecio cualquier sugerencia o recomendación.

¿Fue útil?

Solución

No he probado esto, pero creo que funcionará. Supongo que id es una clave principal de una sola columna. Si ese no es el caso, deberá ajustar este código ligeramente para manejar la 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)

Otros consejos

unirse con una actualización es su única apuesta segura

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top