我需要将表上主键列的类型从int更改为guid。数据库已经包含了我不想丢失的数据,并且需要考虑外键。是否有一种无痛的方式来做这个或者我必须通过一个大的**脚本手动执行它?:)我将不胜感激任何建议
答案 0 :(得分:5)
你必须用艰难的方式,使用脚本:
0)进入单用户模式
1)将新的GUID列添加到主表中,并填充它
2)将新的FK列添加到每个子表,并使用UPDATE FROM
UPDATE c
SET FKcolumn=p.NewGuid
FROM ChildTable c
INNER JOIN ParentTable p ON p.OldIntID=c.OldIntId
3)放弃现有的int FKs
4)删除旧的int列
5)在guid列上添加新的FK
6)退出单用户模式
您应该能够让SQL Server Management studio生成用于添加和删除列和键的脚本。只需在SSMS中进行更改,然后单击“生成更改脚本”工具栏图标,即可将代码剪切并粘贴到文本文件中。
答案 1 :(得分:0)
创建一个帮助函数和过程,如下所示:
pcap
现在是每张桌子的手工作品:
这种方法可确保将int转换为guid并保持数据完整性。