此表中的主键 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
此表中的主键 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
好吧,假设它不是 IDENTITY 列(在这种情况下,您需要将 IDENTITY_INSERT 设置为 on),那么以下应该可以工作(例如,参见SQLFiddle)
UPDATE MyTable
SET ID =
CASE WHEN ID >= 4 SET ID - 3
ELSE ID + 4
END
使用带有 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