sql server将PK类型从int更改为uniqueidentifier

时间:2010-03-29 13:52:39

标签: sql-server

我需要将表上主键列的类型从int更改为guid。数据库已经包含了我不想丢失的数据,并且需要考虑外键。是否有一种无痛的方式来做这个或者我必须通过一个大的**脚本手动执行它?:)我将不胜感激任何建议

2 个答案:

答案 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)

  1. 使用选项"生成脚本"在您的数据库上,以创建" DROP / CREATE CONSTRAINT和INDEXES" (使用高级按钮调整向导)。 运行已创建的SQL脚本部分以删除索引和约束。
  2. 创建一个帮助函数和过程,如下所示:

    pcap
  3. 现在是每张桌子的手工作品:

    1. 在设计器中打开表(SQL Management Studio或其他工具)
    2. 将bigint类型的列更改为VARCHAR(50)
    3. 执行" EXEC bigIntToGuid' myTable' myBigIntColumn'
    4. 返回表设计器将列类型更改为" uniqueidentifier"
    5. 您可以选择添加默认值:newid()和/或将列设置为主键
  4. 打开在步骤1中创建的sql生成的脚本
  5. 仅选择脚本的一部分用于约束和索引创建,并执行它
  6. 这种方法可确保将int转换为guid并保持数据完整性。