我已创建表并想更改该表。我想添加一个主键和identity(1,1)
.
我可以应用主键,但应用身份会出错。有什么遗漏吗?
ALTER TABLE MyTable ADD PRIMARY KEY (Id)
如何使用主键添加身份?
我已创建表并想更改该表。我想添加一个主键和identity(1,1)
.
我可以应用主键,但应用身份会出错。有什么遗漏吗?
ALTER TABLE MyTable ADD PRIMARY KEY (Id)
如何使用主键添加身份?
您不能更改数据库中现有列的定义来添加IDENTITY
属性(也不能删除它)。您必须使用以下属性创建一个新列IDENTITY
:
ALTER TABLE MyTable ADD NewID int IDENTITY(1,1) not null
不幸的是,您无法将旧的 ID 值分配给这个新列。如果你想分配 ID 值,然后让IDENTITY
接管,你最好用你想要的结构创建一个新表,然后从旧表中导入数据(你可以用来IDENTITY_INSERT
为IDENTITY
列分配值)。
然后,如果需要,您将删除旧表并重命名新表。
但是,它可能必须在设计模式下完成,并且您必须将有问题的列指定为标识。右键单击表格,选择“设计”,转到列,在“列属性”中查找“标识规范”,一切就绪。
我发现这个是因为我正在寻找相同的答案以编程方式将 IDENTITY 分配给 SQL Server 2019 中的表。我的情况是我试图将其应用到的表是一个导入的表,其中我试图应用 IDENTITY 的列在导入它的表中有 IDENTITY,因此它满足 IDENTITY 的要求 - 每个值都是唯一的并且具有正确的数据类型。这项和其他研究帮助我了解我无法以编程方式执行此操作。
但这并不妨碍我实际完成结果。只要种子和标识间隔与表的原始设置相匹配,我就可以在 SSMS 的设计视图中打开表并在那里分配 IDENTITY,而不是以编程方式。显然,如果涉及很多表,则解决方案不会那么快,但如果 IDENTITY 值在其他关联表中用作外键,则可以保护它们的完整性。