我有一个如下结构的表:
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。
但是,我无法修改这些属性。我该如何更改这些值?
这是一个截屏。
答案 0 :(得分:3)
您更改了表,而不是约束。 Management Studio将为您处理其他内容(请注意,它必须放下桌面并重新创建它,因此如果桌子很大,请准备好喝咖啡,快点等待)。
在属性窗格的“标识列”下,选择正确的列:
点击保存图标(或 Ctrl + S ):
请注意,您可能还必须取消选中工具>选项。设计师>表和数据库设计者>防止保存需要重新创建表的更改。
通常我会建议使用DDL而不是使用hokey和bug-ridden GUI来更改架构,但这是一种罕见的情况,其中GUI实际上需要 less 工作而不是键入必需的命令。更改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
答案 1 :(得分:2)
如果要在Management Studio中更改此属性,请右键单击该表,选择“设计”,然后选择主键列,并在底部查看其属性,您可以在其中打开“标识规范”部分。在那里,您可以编辑“IsIdentity”设置。然后保存更改。