我有一个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
如果这是有道理的, 杆
答案 0 :(得分:2)
UPDATE语句中的所有赋值(SET子句中的赋值和各行的赋值)都是同时发生的。
所以
UPDATE Table Set ID = ((ID + 1) % 3) + 1
(或者无论正确的逻辑是什么,因为我无法确定第二个表中需要什么“方向”)才会正确行事。
您甚至可以使用此知识交换两列的值:
UPDATE Table SET a=b,b=a
将交换列的内容,而不是(正如您所料)最终将两列设置为相同的值。
答案 1 :(得分:1)
这就是我通常的做法
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
答案 2 :(得分:1)
sql case语句怎么样(类似这样)?
UPDATE table SET intID = CASE
WHEN intID = 3 THEN 2
WHEN intID = 1 THEN 3
WHEN intID = 2 THEN 1
END
答案 3 :(得分:0)
过去,我通过创建临时表(其结构与目标表相同)来完成这样的操作,并使用额外的列来保存新值。获得所有新值后,我会将它们复制到目标表中的目标列,然后删除临时表。