通过主键属性更改IDENTITY属性?

时间:2013-08-29 18:09:09

标签: sql sql-server-2008 primary-key ssms identity

我有一个如下结构的表:

PrimaryKey int set as PK
SomeForeignKey int set as FK... linked to some other table's PK
SomeVarChar varchar 
SomeDate datetime

当我右键单击我的PK的属性时,我注意到Identity设置为False,Identity Seed设置为0,Identity Icrement设置为0。

但是,我无法修改这些属性。我该如何更改这些值?

这是一个截屏。

enter image description here

2 个答案:

答案 0 :(得分:3)

您更改了表,而不是约束。 Management Studio将为您处理其他内容(请注意,它必须放下桌面并重新创建它,因此如果桌子很大,请准备好喝咖啡,快点等待)。

  • 在对象资源管理器中右键单击该表,然后选择“设计”

enter image description here

  • 右键单击要作为标识的列,然后选择“属性”

enter image description here

在属性窗格的“标识列”下,选择正确的列:

enter image description here

点击保存图标(或 Ctrl + S ):

enter image description here

请注意,您可能还必须取消选中工具>选项。设计师>表和数据库设计者>防止保存需要重新创建表的更改。

enter image description here

通常我会建议使用DDL而不是使用hokey和bug-ridden GUI来更改架构,但这是一种罕见的情况,其中GUI实际上需要 less 工作而不是键入必需的命令。更改IDENTITY属性是DDL刚刚没有抓住的一件事,并且为解决它而必须做的废话是荒谬的(在这种情况下,我添加了一个新列,并编写了使该标识所需的更改)而不是列 - 你甚至不能在这里看到所有的废话,因为不可调整大小的对话框):

enter image description here

这是实际的脚本(不是你可能想要经常运行的东西,不要自己想出来):

/* To prevent any potential data loss issues, you should review this script in detail 
   before running it outside the context of the database designer.*/
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_foo
    (
    ID int NOT NULL,
    [Foo INT] int NOT NULL IDENTITY (1, 1)
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_foo SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_foo OFF
GO
IF EXISTS(SELECT * FROM dbo.foo) EXEC('INSERT INTO dbo.Tmp_foo (ID)
        SELECT ID FROM dbo.foo WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.foo
GO
EXECUTE sp_rename N'dbo.Tmp_foo', N'foo', 'OBJECT' 
GO
ALTER TABLE dbo.foo ADD CONSTRAINT
    PK__foo__3214EC274CF5691D PRIMARY KEY CLUSTERED 
    (ID) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
        ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
COMMIT

答案 1 :(得分:2)

如果要在Management Studio中更改此属性,请右键单击该表,选择“设计”,然后选择主键列,并在底部查看其属性,您可以在其中打开“标识规范”部分。在那里,您可以编辑“IsIdentity”设置。然后保存更改。