您更改表,而不是约束。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