更新sql server中行ID的最简单方法?

时间:2013-04-08 14:02:53

标签: sql sql-server tsql

此表中的主键ID值正在我们最近合并的2个系统中使用,但是其中一个系统中有大量项目指向错误的id值,我需要更新ID(PK)值,以便600万个现有项目将指向正确的行。

enter image description here

id喜欢将id列更新为以下内容:

ID
1 to 5
2 to 6
3 to 7
4 to 1
5 to 2
6 to 3
7 to 4

2 个答案:

答案 0 :(得分:1)

好吧,假设它不是IDENTITY列(在这种情况下你需要将IDENTITY_INSERT设置为on),那么以下内容应该有效(例如,参见SQLFiddle

UPDATE MyTable 
SET ID = 
    CASE WHEN ID >= 4 SET ID - 3 
         ELSE  ID + 4
    END

答案 1 :(得分:0)

将更新查询与案例陈述一起使用

Update tableName set PkId = Case PkId 
   When 1 then 5
   When 2 then 6
   When 3 then 7
   When 4 then 1
   When 5 then 2
   When 6 then 3
   When 7 then 4  End
Where PkId In (1,2,3,4,5,6,7)

如果您的答案中的值只是需要更改的值的一小部分(是否需要更改所有600万?),那么您需要创建具有旧的不正确值和新值的映射表正确的值,并使用它(使用连接)而不是case语句。

 Update t set PkId = map.NewPkId
 From tablename t 
    Join mappingTable m 
       On m.oldPkId = t.PkId