我需要将表的主键更改为标识列,并且表中已经有许多行。
我有一个脚本来清理ID,以确保它们从1开始是连续的,在我的测试数据库上可以正常工作。
将列更改为具有标识属性的SQL命令是什么?
您不能更改现有的标识列。
您有2种选择,
创建一个具有标识的新表并删除现有表
创建具有标识的新列并删除现有列
方法1.(新表)在这里,您可以将现有数据值保留在新创建的标识列上。请注意,如果不满足“如果不存在”的条件,您将丢失所有数据,因此请确保也将条件放在下拉列表上!
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论坛帖子:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句