用于alter table的sql server helper存储过程或实用程序alter column IDENTITY(1,1)

时间:2009-09-02 13:57:59

标签: sql sql-server sql-server-2005 stored-procedures

我想将sql server 2005表中的列修改为IDENTITY(1,1)
顺便说一下,该表为空,要更改的列是主键。
此列也是另外两个表的外键。

谷歌搜索后,我发现您无法使用Alter表语法修改列并使其成为一个缩进列。
链接#1:How do I add the identity property to an existing column in SQL Server
链接#2:Adding an identity to an existing column -SQL Server

我最终检查从属表(其中2个)删除外键(从SSMS生成脚本),然后删除主表,然后使用标识重新创建。 (也可以在这里尝试重命名选项)
然后为之前的两个表重新创建外键。

但所有这些都是手工作业,任何脚本或SP都可以使这更容易。

理想情况下,所有这些步骤都可以通过这样的脚本/工具/实用程序完成:

  1. 检查相关表格键
  2. 为此生成创建和删除外键脚本
  3. 为主表生成创建脚本
  4. 删除主表(如果表中有数据,则重命名表)
  5. 重新创建启用了标识列的表格
  6. 重新创建外键

3 个答案:

答案 0 :(得分:4)

您可以使用SSMS生成脚本(编辑表格,保存脚本),但除此之外,它是您确定的手动过程。

SSMS脚本将获取依赖关系等。对于这种工作,我倾向于使用SSMS生成基本脚本,pimp一点,仔细运行,然后使用比较工具(如Red Gate比较)生成更安全的版本。

修改:The SSMS error is not an error, it's a safety check that can be switched off

答案 1 :(得分:2)

(这只是gbn帖子的后续内容,有更多详细信息 - 想出这些内容并不是那么容易。)(

编写一个实用程序来实现这一点并非不可能,只是非常复杂和非常困难。幸运的是,微软已经做到了 - 它叫做SSMS(或SMO?)。要生成这样的脚本:

  • 在对象资源管理器中,深入查看要修改的数据库和表 右键单击并选择“设计”

  • 对设计屏幕中的一个表进行所需的更改。它非常直观。

  • 要添加/删除标识属性,请在上部窗格中选择该列,然后在下部窗格/“列属性”选项卡中,展开并配置“标识规范”下的设置。

    < / LI>
  • 要生成一个脚本来实现所有更改,并包含所有相关的键更改,请单击“生成更改脚本”工具栏按钮。这也是“表设计器”菜单下的一个选项。

我也这样做来生成脚本(我后来修改了--SMS不总是生成最有效的代码。)完成后,你可以退出而不保存你的更改 - 留下你可以测试你的数据库新脚本。

答案 2 :(得分:0)

  1. 删除pk并构建相同的数据类型列
  2. 将要设置标识的列的数据复制到新列。
  3. 删除旧列
  4. 重置主键
  5. ALTER TABLE UserRole DROP CONSTRAINT PK_XX ALTER TABLE XX

    ADD newX int not null identity(1,1)primary key

    更新XX设置newX = oldX

    改变表XX DROP COLUMN oldX

    这是设置标识列的最简单方法。 如果您不想使用长生成的脚本。