更改主键和标识的表列

时间:2012-08-10 07:12:16

标签: sql-server-2008 tsql

我已创建表并希望更改该表。我想添加一个主键和identity(1,1)

我可以应用主键,但应用标识会出错。什么遗失了?

ALTER TABLE MyTable ADD PRIMARY KEY (Id)

如何使用主键添加标识?

2 个答案:

答案 0 :(得分:20)

您不能更改数据库中现有列的定义,以添加IDENTITY属性(也不能删除它)。您必须使用IDENTITY属性创建 new 列:

ALTER TABLE MyTable ADD NewID int IDENTITY(1,1) not null

不幸的是,您无法将旧ID值分配给此新列。如果要分配ID值,然后让IDENTITY接管,最好创建一个具有所需结构的新表,然后从旧表中导入数据(可以使用{{3将值分配给IDENTITY列。)

如果需要,您将删除旧表并重命名新表。

答案 1 :(得分:0)

我发现这是因为我正在寻找相同的答案,以编程方式将IDENTITY分配给SQL Server 2019中的表。我的情况是,我尝试将其应用于的表是一个导入的表,其中我正在尝试的列将IDENTITY应用于从中导入IDENTITY的表中,以便满足IDENTITY的要求-每个值都是唯一的,并且具有正确的数据类型。 这项研究和其他研究帮助我了解到我无法以编程方式进行此操作。

但这并不能阻止我实际完成结果。无需通过编程,而是可以在SSMS的设计视图中打开表,并在其中分配IDENTITY,只要种子和标识间隔与表的原始设置匹配即可。显然,如果涉及到很多表,不是一个快速的解决方案,但是如果将IDENTITY值用作其他关联表中的外键,则可以保护IDENTITY值的完整性。