SQL表中的自增主键

63

使用Sql Express Management Studio 2008 GUI(非编程方式),如何使主键自动递增?

让我解释一下:有一个表,其中有一列名为"id",并且此列的项被设置为主键。我想使此列自动递增,但怎么做呢?

干杯


3
当然,你不应该通过GUI进行更改。你应该编写脚本来执行任务并将它们放入源代码管理中,这样你就可以轻松地将更改部署到生产数据库中。当表格变得很大时,GUI是一个非常糟糕的工具来修改它们。 - HLGEM
6个回答

122
  1. 假设您目前正在设计表格。如果不是,请右键单击表名 - "Design"。
  2. 单击所需的列。
  3. 在"列属性"(底部)中,滚动到"身份规范"部分,展开它,然后将"(是否为标识)"切换为"Yes"。

enter image description here


注意:如果您将标识列设置为其他列,则无法切换或更改它,请确保您在标识列上,因为表中只能有一个标识列。 - Mayer Spitz

14

虽然以下不是在GUI中执行的方法,但您可以使用IDENTITY数据类型(起始值、增量)获得自动递增:

CREATE TABLE "dbo"."TableName"
(
   id int IDENTITY(1,1) PRIMARY KEY NOT NULL,
   name varchar(20),
);

插入语句应列出除 ID 列之外的所有列(它将填充为自动增量值):

INSERT INTO "dbo"."TableName" (name) VALUES ('alpha');
INSERT INTO "dbo"."TableName" (name) VALUES ('beta');

以及结果

SELECT id, name FROM "dbo"."TableName";

将会是

id    name
--------------------------
1     alpha
2     beta

11

在SSMS中右键单击表格,选择“设计”,然后点击id列。在属性中,将标识设置为种子值 @ 比如 1,并且增量为 1 - 保存即可。


"identity"和"identity seed"被禁用了。我该如何启用它们? - samsam114
根据其他回复,您需要先将该列标记为标识列 - 将 is identity 设置为 'yes'。 - Will A

8

如果按照以下答案更改后仍无法保存,那么请按照以下步骤操作:

工具 -> 选项 -> 设计人员 -> 表格和数据库设计师 -> 取消选中“防止保存需要重建表的更改”框 -> 确定

现在可以尝试保存,应该可以正常工作。


7

这台机器上没有Express Management Studio,所以只能靠记忆来操作。我认为你需要将该列设置为"IDENTITY",在属性下应该有一个[+]可展开,然后将自动增量设置为true。


0

我认为可以在定义阶段像这样做

创建员工表( id int 自增, name varchar(50), primary key(id) ).. 我正在尝试查看是否有一种方法可以更改现有表并将列设置为自增,但从理论上来看似乎不可能(因为现有值可能需要修改)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接