Своп идентификаторы на сервере SQL - PullRequest
3 голосов
/ 06 июля 2011

Я взглянул на вопрос: Значения первичного ключа подкачки sql

Итак, я получил следующий скрипт:

UPDATE t, t as t2
SET t.id = t2.id, t2.id = t.id
WHERE t.id = 1 AND t2.id = 2

Но я не могу перевести этодействительный синтаксис SQL Server.

Пожалуйста, помогите мне:)

Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 06 июля 2011

Похоже, вы пытаетесь объединить таблицу против себя, чтобы вы могли обновить две записи одновременно.Я не уверен, что это возможно, но это определенно не нужно.

Просто найдите две записи и вычислите один идентификатор из другого, вычтя его из суммы двух идентификаторов:

update t
set id = (1 + 2) - id
where id = 1 or id = 2

(Примечание. Для этого требуется, чтобы ключ был цифровым. Хотя это наиболее распространенный случай, некоторые нечисловые типы также могут использоваться в качестве ключей.)

4 голосов
/ 06 июля 2011

А как же

UPDATE t SET t.id = (CASE t.id WHEN 1 THEN 2 ELSE 1 END)
WHERE t.id IN (1, 2)
...