将当前表列更新为标识列

时间:2012-09-10 11:20:43

标签: sql-server identity-column

  

可能重复:
  set identity on the column

我有一张表让我们说一下列名为Serno的消息。 Serno保留每条消息的序列号。 但是系统很旧并且使用max(serno)命令创建此序列号。 现在,我正在尝试将此列更改为标识,但我不想丢失每条消息的当前序列号。

是否有解决方案。

我已经尝试创建一个新的标识列并从那里的serno复制值,但它不起作用。 创建新表作为数据库都不会为每条消息提供新的序列号,我不希望这样。

任何想法都是欢迎的。

提前致谢

M.A

2 个答案:

答案 0 :(得分:1)

您是否尝试在设计视图中打开表格,选择列,并将IdentitySpecification设置为Yes(如果您有很多行,这可能需要一段时间,因为它会在内部生成完整的副本(表)

答案 1 :(得分:1)

您无法更改现有列并将其设置为标识列。

您需要创建一个临时表并将值插入其中。最后,您必须删除实际表并将临时表重命名为实际表

CREATE TABLE dbo.NewTable(ID int IDENTITY(1, 1),<other columns>)

SET IDENTITY_INSERT dbo.NewTable ON

INSERT  INTO dbo.NewTable ( Id, <other columns>)
SELECT  Id,  <other columns> FROM    <actual_table>
go

SET IDENTITY_INSERT dbo.NewTable OFF
go

DROP TABLE your_table
go

Exec sp_rename 'NewTable', 'actual_table'
相关问题