我需要将表的主键更改为标识列,并且表中已经有很多行。
我有一个脚本来清理 ID 以确保它们从 1 开始是连续的,在我的测试数据库上工作正常。
将列更改为具有标识属性的 SQL 命令是什么?
您不能更改现有的身份列。
你有2个选择,
创建具有标识的新表并删除现有表
创建具有标识的新列并删除现有列
方法1.( 新建表 )在这里您可以保留新创建的标识列上的现有数据值。请注意,如果不满足“如果不存在”,您将丢失所有数据,因此请确保您也将条件放在 drop 上!
CREATE TABLE dbo.Tmp_Names ( Id int NOT NULL IDENTITY(1, 1), Name varchar(50) NULL ) ON [PRIMARY] go SET IDENTITY_INSERT dbo.Tmp_Names ON go IF EXISTS ( SELECT * FROM dbo.Names ) INSERT INTO dbo.Tmp_Names ( Id, Name ) SELECT Id, Name FROM dbo.Names TABLOCKX go SET IDENTITY_INSERT dbo.Tmp_Names OFF go DROP TABLE dbo.Names go Exec sp_rename 'Tmp_Names', 'Names'
方法2( 新建列 )您可以在新创建的标识列上保留现有数据值,标识列将保存数字的序列。
Alter Table Names Add Id_new Int Identity(1, 1) Go Alter Table Names Drop Column ID Go Exec sp_rename 'Names.Id_new', 'ID', 'Column'
有关详细信息,请参阅以下 Microsoft SQL Server 论坛帖子:
如何将列更改为身份(1,1)