0

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

在此处输入图像描述

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

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

2 回答 2

1

好吧,假设它不是 IDENTITY 列(在这种情况下,您需要将 IDENTITY_INSERT 设置为 on),那么以下应该可以工作(例如,参见SQLFiddle

UPDATE MyTable 
SET ID = 
    CASE WHEN ID >= 4 SET ID - 3 
         ELSE  ID + 4
    END
于 2013-04-08T14:18:44.040 回答
0

使用带有 case 语句的更新查询

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
于 2013-04-08T14:23:25.030 回答