更新db表中的列

时间:2011-01-14 15:40:18

标签: sql-server tsql

我有一个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 个答案:

答案 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)

过去,我通过创建临时表(其结构与目标表相同)来完成这样的操作,并使用额外的列来保存新值。获得所有新值后,我会将它们复制到目标表中的目标列,然后删除临时表。