在SQL Server表的列中交换值

时间:2016-05-05 19:05:42

标签: sql-server

我正在尝试通过使用以下查询更新我的表数据(1 => 3 = 2 => 1,3 => 2)。

/* Temporarily set 1 to a dummy unused value of 11 
   so they are disambiguated from those set to 1 in the next step */
update <tablename> 
set id = 11
where id = 1

update <tablename> 
set id = 1
where id = 2

update <tablename> 
set id = 2
where id = 3

update <tablename> 
set id = 3
where id = 11

想知道我是否可以优化我的脚本。

1 个答案:

答案 0 :(得分:5)

您可以使用case。从概念上讲,操作一下子就会发生#34;因此,不需要像顺序方法那样使用第四个虚拟值。

UPDATE YourTable
SET ID = CASE ID WHEN 1 THEN 3
                 WHEN 2 THEN 1
                 WHEN 3 THEN 2
         END
WHERE ID IN (1,2,3)

虽然改变id是不寻常的,因为它们通常应该是不可变的。