代码之家  ›  专栏  ›  技术社区  ›  neves

SQLServer:如何将现有的表int主键更改为标识列?

  •  6
  • neves  · 技术社区  · 17 年前

    我的数据库有一个包含数千条记录的表。主键是一个整数。与此列关联的外键约束很多。

    我想将此列更改为标识密钥。最好的方法是什么?我还需要将此更新发送到我们的客户端安装。

    在SQL Server 2000中工作的答案的奖励点数。

    4 回复  |  直到 15 年前
        1
  •  14
  •   neves    15 年前

    在SQL Server Management Studio中有一个很好的功能为我节省了一天的时间。

    在SSMS中,转到选项->设计器->表和数据库设计器,选中“自动生成更改脚本”并取消选中“防止保存需要重新创建表的更改”。

    在对象资源管理器中,转到表并选择将获取标识规范的列。右键单击并选择“修改”。在“列属性”面板中,展开树“标识规范”,并将“(is identity)”更改为“是”。现在在左上角,选择“生成脚本”图标。注意警告信息。

    现在,您将拥有一个生成的脚本,该脚本将删除所有约束,用标识重新创建表,并重新创建约束。真的!

    我会测试它并把我的结果发布在这里。

    更新: 一切正常。我忘了在这个问题上说,我需要脚本来复制我们客户机安装中的修改。

    这个网站真是太棒了。我花在写自己的答案上的时间还有3个!

        2
  •  1
  •   Stuart    17 年前

    在Enterprise Manager中,右键单击表视图中的表,选择“设计”。

    单击列的左侧(然后,双击“标识”,在下面的列中,在“列属性”中,将其打开,默认为自动递增1

        3
  •  1
  •   Matthew Pelser    17 年前

    将现有列更改为标识列没有单个“alter table”DDL。只能将新的标识列添加到现有表中。

    这可以在Enterprise Manager中完成,但您需要注意,SQL Server正在创建一个新表,并在后台复制您的数据。你可能对此有一些问题。这篇文章对这一点有更多的解释 http://www.mssqltips.com/tip.asp?tip=1397

    在您的场景中,我认为您需要将此脚本和某些内容结合起来才能禁用和重新启用FK。

        4
  •  0
  •   Raj More    17 年前

    如果列是作为现有关系一部分的整数,则它已经是唯一的。因此,您不必担心重复!这是一个已经避免的巨大麻烦。

    可以发出alter table命令来更改列,也可以使用Enterprise Manager进行更改。