12

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

我可以应用主键,但应用身份会出错。有什么遗漏吗?

ALTER TABLE MyTable ADD PRIMARY KEY (Id)

如何使用主键添加身份?

4

3 回答 3

26

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

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

不幸的是,您无法将旧的 ID 值分配给这个新列。如果你想分配 ID 值,然后让IDENTITY接管,你最好用你想要的结构创建一个新表,然后从旧表中导入数据(你可以用来IDENTITY_INSERTIDENTITY列分配值)。

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

于 2012-08-10T07:14:22.903 回答
0

但是,它可能必须在设计模式下完成,并且您必须将有问题的列指定为标识。右键单击表格,选择“设计”,转到列,在“列属性”中查找“标识规范”,一切就绪。

于 2021-11-01T15:54:49.620 回答
0

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

但这并不妨碍我实际完成结果。只要种子和标识间隔与表的原始设置相匹配,我就可以在 SSMS 的设计视图中打开表并在那里分配 IDENTITY,而不是以编程方式。显然,如果涉及很多表,则解决方案不会那么快,但如果 IDENTITY 值在其他关联表中用作外键,则可以保护它们的完整性。

于 2020-10-08T03:22:16.400 回答