0

我有一个结构如下的表:

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。

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

这是一个屏幕截图。

在此处输入图像描述

4

2 回答 2

3

您更改表,而不是约束。Management Studio 将为您处理其他事情(请注意,它必须删除表并重新创建它,因此如果表很大,请准备好喝杯咖啡并快点等待)。

  • 右键单击对象资源管理器中的表并选择设计

在此处输入图像描述

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

在此处输入图像描述

在属性窗格中的“身份列”下,选择正确的列:

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

通常我会建议使用 DDL 来更改模式,而不是使用虚假和漏洞百出的 GUI,但这是一种罕见的情况,即 GUI 实际上比键入必要的命令需要更少的工作。更改 IDENTITY 属性是 DDL 还没有赶上的一件事,它必须做的废话来解决它是荒谬的(在这种情况下,我添加了一个新列,并编写了使身份所需的更改列代替 - 由于不可调整大小的对话框,您甚至看不到这里的所有废话):

在此处输入图像描述

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

/* 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
于 2013-08-29T18:24:01.503 回答
2

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

于 2013-08-29T18:13:02.237 回答