我有一张表让我们说一下列名为Serno的消息。 Serno保留每条消息的序列号。 但是系统很旧并且使用max(serno)命令创建此序列号。 现在,我正在尝试将此列更改为标识,但我不想丢失每条消息的当前序列号。
是否有解决方案。
我已经尝试创建一个新的标识列并从那里的serno复制值,但它不起作用。 创建新表作为数据库都不会为每条消息提供新的序列号,我不希望这样。
任何想法都是欢迎的。
提前致谢
M.A
答案 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'