小编典典

向现有列添加标识

all

我需要将表的主键更改为标识列,并且表中已经有很多行。

我有一个脚本来清理 ID 以确保它们从 1 开始是连续的,在我的测试数据库上工作正常。

将列更改为具有标识属性的 SQL 命令是什么?


阅读 91

收藏
2022-03-13

共1个答案

小编典典

您不能更改现有的身份列。

你有2个选择,

  1. 创建具有标识的新表并删除现有表

  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)

2022-03-13