3

可能重复:
在列上设置标识

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

有没有办法解决这个问题。

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

欢迎任何想法。

提前致谢

4

2 回答 2

1

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

于 2012-09-10T11:32:29.447 回答
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'
于 2012-09-10T11:46:52.647 回答