【问题标题】:SQL Server 2012 - Setting an Identity column on a Primary KeySQL Server 2012 - 在主键上设置标识列
【发布时间】:2014-01-13 21:45:52
【问题描述】:

我正在尝试在数据库图表上将主键列设置为 Identity = Yes。

我单击要设置的列,然后按 F4 以显示该列的属性。我通常滚动到身份并将其更改为是,但它现在不允许我这样做。我认为这是因为该列在其他表中设置为外键?

我不想删除连接,我可以这样做吗?

这里是一些截图:

改变的关键:

F4(属性);更改已禁用:

【问题讨论】:

  • 您不能将现有列更改为IDENTITY - 您必须创建一个新列并将其设置为IDENTITY
  • @marc_s - SSMS 通常允许您生成脚本来重建表。它在此处显示为灰色的原因是您不能将 uniqueidentifier 列设为 identity 列。身份需要 intnumeric(x,0) 数据类型。
  • @marc_s - 实际上,它将整个表复制到一个新表,然后删除原始表并重命名副本。
  • 我的回答解决了你的问题吗?
  • @t-clausen.dk 我实际上默认删除密钥并将其重新创建为 int 而不是 UniqueIdentifier。感谢您的回答,我知道对于那些没有像我在新设计的数据库中那样重新创建列的奢侈的人来说,这可能是一个很好的解决方案。谢谢。

标签: sql-server tsql database-design


【解决方案1】:

这是一个使用表格测试的示例:

create table test(id int, a int)

insert test values(3,1)
alter table test add id_new int identity(1,1)

go

SET IDENTITY_INSERT test ON
delete from test
output deleted.id, deleted.a, deleted.id into test(id, a, id_new)
SET IDENTITY_INSERT test OFF

go

alter table test drop column id

EXEC sp_rename 
@objname= 'test.id_new', 
@newname = 'id', 
@objtype = 'COLUMN'

declare @maxid int = (select max(id) from test)
DBCC CHECKIDENT(test, RESEED, @maxid);

您的列 ID 是标识列

你可以在这里测试一切正常:

insert test values(10)
select * from test

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 2014-09-23
    • 1970-01-01
    • 2010-10-17
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    相关资源
    最近更新 更多