此表中的主键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
答案 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