如何将标识属性添加到SQL Server中的现有列

在SQL Server中(在我的情况下,2005)如何使用T-SQL将标识属性添加到现有表列?

就像是:

alter table tblFoo alter column bar identity(1,1) 

我不相信你能做到这一点。 你最好的办法是创build一个新的标识列,并使用身份插入命令复制数据(如果你确实想保留旧的值)。

这里是一个体面的文章详细描述的过程: http : //www.mssqltips.com/tip.asp? tip= 1397

Vikash发布的解决scheme不起作用; 它会在SQL Management Studio(2005,如指定的OP)中产生“错误的语法”错误。 SQL Server的“精简版”支持这种操作只是一个捷径,因为真正的过程更像Robert&JohnFX所说的 – 创build一个重复的表,填充数据,重新命名原来的新表适当。

如果你想保留那些已经存在的值,那么你可以这样做:

 CREATE TABLE tname2 (etc.) INSERT INTO tname2 FROM tname1 DROP TABLE tname1 CREATE TABLE tname1 (with IDENTITY specified) SET IDENTITY_INSERT tname1 ON INSERT INTO tname1 FROM tname2 SET IDENTITY_INSERT tname1 OFF DROP tname2 

当然,不build议删除并重新创build由实时代码使用的表(tname1)! 🙂

该表是否填充? 如果不删除并重新创build表。

如果填充列中已经存在的值? 如果他们是你不想保留的价值。

根据需要创build一个新表,将旧表中的logging加载到新的表中,并让数据库正常填充标识列。 重命名你的原始表,并重新命名为正确的名称:)。

最后,如果你希望创build身份的列当前包含主键值,并且已经被其他表引用了,那么如果你确定这是你想要做的事情,那么你将需要完全重新思考:)

没有直接的做法,除了:

一)通过SQL即:

 -- make sure you have the correct CREATE TABLE script ready with IDENTITY SELECT * INTO abcTable_copy FROM abcTable DROP TABLE abcTable CREATE TABLE abcTable -- this time with the IDENTITY column SET IDENTITY_INSERT abcTable ON INSERT INTO abcTable (..specify all columns!) FROM (..specify all columns!) abcTable_copy SET INDENTITY_INSERT abcTable OFF DROP TABLE abcTable_copy -- I would suggest to verify the contents of both tables -- before dropping the copy table 

B)通过MSSMS将在背景中完全相同,但会减less胖指法。

  • 在MSSMS对象资源pipe理器中,右键单击您需要修改的表
  • select“devise”select您想添加IDENTITY的列
  • 将标识设置从NO – > YES(可能是种子)
  • Ctr + S表

在这里输入图像说明

这将删除并重新创build包含所有原始数据的表。 如果您收到警告:

在这里输入图像说明

转到MSSMS 工具 – >选项 – >devise器 – >表和数据库devise器,并取消选中“保存需要重新创build表的更改”选项

要小心的事情是:

  1. 你的数据库有足够的磁盘空间之前,你这样做
  2. 数据库没有被使用(特别是你正在改变的表格)
  3. 确保在做之前备份你的数据库
  4. 如果表中有大量数据(超过1G),请在实际数据库中使用之前先在其他地方尝试
 alter table tablename alter column columnname add Identity(100,1)