我想将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都可以使这更容易。
理想情况下,所有这些步骤都可以通过这样的脚本/工具/实用程序完成:
答案 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)
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
这是设置标识列的最简单方法。 如果您不想使用长生成的脚本。