Замена двух строк в MS SQLServer с сохранением исходного первичного ключа и без обновления вручную

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

Вопрос

У меня возникла следующая проблема :У меня есть строки, подобные

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

Я хотел бы поменять их местами, сохранив все старые первичные ключи и ограничения.Конечно, я могу легко решить эту проблему вручную, обновив строки.Мне как бы интересно, есть ли у кого-нибудь отличное решение для такого рода проблем вместо того, чтобы просто выполнять команду обновления вручную.Я действительно очень ценю любые предложения или рекомендации.

Это было полезно?

Решение

Я не тестировал это, но я думаю, что это сработает.Я предполагаю, что id - это первичный ключ с одним столбцом.Если это не так, то вам нужно будет немного скорректировать этот код для обработки 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)

Другие советы

самостоятельное присоединение к обновлению - ваш единственный безопасный выбор

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top