Обмен двух строк в MS SQLServer с сохранением исходного первичного ключа и без обновления вручную - PullRequest
3 голосов
/ 27 января 2009

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

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

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

Ответы [ 2 ]

6 голосов
/ 27 января 2009

Я не проверял это, но я думаю, что это будет работать. Я предполагаю, что 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)
0 голосов
/ 27 января 2009

самостоятельное присоединение с обновлением - ваша единственная надежная ставка

...