Обновление столбца в таблице БД - PullRequest
1 голос
/ 14 января 2011

У меня есть столбец int id, для которого мне необходимо выполнить однократное обновление обслуживания / исправления.

For example, currently the values look like this:
1
2
3

I need to make the following change:
1=3
2=1
3=2

Есть ли способ сделать это в одном утверждении? Я продолжаю думать, что обновление запутается, если, скажем, изменение с 1 = 3 произойдет, тогда, когда дело доходит до 3 = 2, оно изменит это обновление 1 = 3 на 3 = 2, что дает

Incorrectly:
2
1
2

Если это имеет смысл, стержень.

Ответы [ 4 ]

2 голосов
/ 14 января 2011

Все назначения в операторе UPDATE (как назначения в предложении SET, так и назначения в отдельных строках) выполняются так, как если бы они все произошли одновременно.

Итак

UPDATE Table Set ID = ((ID + 1) % 3) + 1

(или какая-то правильная логика, так как я не могу понять, какое «направление» необходимо из второй таблицы) будет действовать правильно.

Вы даже можете использовать это знание, чтобы поменять значение двухстолбцы:

UPDATE Table SET a=b,b=a

поменяет содержимое столбцов, вместо того, чтобы (как можно было ожидать) оба столбца были установлены на одно и то же значение.

1 голос
/ 14 января 2011

Как насчет SQL-оператора case (как-то так)?

UPDATE table SET intID = CASE 
WHEN intID = 3 THEN 2
WHEN intID = 1 THEN 3
WHEN intID = 2 THEN 1
END
1 голос
/ 14 января 2011

Вот как я обычно это делаю

DECLARE @Update Table (@oldvalue int, @newvalue int)

INSERT INTO @Update  Values (1,3)
INSERT INTO @Update  Values (2,1)
INSERT INTO @Update  Values (3,2)

Update Table
SET 
   yourField = NewValue
FROM  
   table t
   INNER JOIN @Update 
   on t.yourField = @update.oldvalue
0 голосов
/ 14 января 2011

В прошлом я делал подобные вещи, создав временную таблицу (структура которой совпадает с целевой таблицей) с дополнительным столбцом для хранения нового значения.Как только у меня появятся все новые значения, я скопирую их в целевой столбец в целевой таблице и удалю временную таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...