我需要将表的主键更改为一个标识列,表中已经有很多行.
我有一个脚本来清理ID,以确保它们从1开始按顺序排列,在我的测试数据库上运行良好.
将列更改为具有标识属性的SQL命令是什么?
我需要将表的主键更改为一个标识列,表中已经有很多行.
我有一个脚本来清理ID,以确保它们从1开始按顺序排列,在我的测试数据库上运行良好.
将列更改为具有标识属性的SQL命令是什么?
不能为标识更改现有列.
你有两个 Select ,
使用identity&;创建一个新表;删除现有表
使用identity&;删除现有列
方法1.(New table)在这里,您可以保留新创建的标识列上的现有数据值.请注意,如果不满足"if not exists"(如果不存在),您将丢失所有数据,因此请确保您也将该条件置于放置状态!
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(New column)您不能在新创建的标识列上保留现有数据值,标识列将保留数字序列.
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论坛帖子: