如何将标识属性添加到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表的更改”选项
要小心的事情是:
- 你的数据库有足够的磁盘空间之前,你这样做
- 数据库没有被使用(特别是你正在改变的表格)
- 确保在做之前备份你的数据库
- 如果表中有大量数据(超过1G),请在实际数据库中使用之前先在其他地方尝试
alter table tablename alter column columnname add Identity(100,1)