如何在 SQL Server
数据库表中auto increment
primary key
?我已经浏览了论坛,但看不到如何做到这一点。
我查看了属性,但看不到选项。我看到了一个答案,您转到 Identity
规范属性并将其设置为 yes 并将 Identity increment
设置为 1,但该部分显示为灰色,我无法更改 否到是。
必须有一个简单的方法来做到这一点,但我找不到它。
确保 Key 列的数据类型为 int
,然后手动设置标识,如图所示
https://i.stack.imgur.com/ueRYJ.jpg
或者只是运行这段代码
-- ID is the name of the [to be] identity column
ALTER TABLE [yourTable] DROP COLUMN ID
ALTER TABLE [yourTable] ADD ID INT IDENTITY(1,1)
如果 ID
不是表中的唯一列,则代码将运行
图像参考fifo的
在创建表时,您可以创建一个 IDENTITY
列,如下所示:
CREATE TABLE (
ID_column INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
...
);
IDENTITY
属性将从数字 1 开始自动递增列。(请注意,列的数据类型必须是整数。)如果要将其添加到现有列,请使用 ALTER TABLE
命令。
编辑:
测试了一下,我找不到通过“列属性”窗口更改各种表的身份属性的方法。我想如果你想让一个列成为标识列,你必须使用 ALTER TABLE
命令。
您必须展开 Identity 部分以公开增量和种子。
https://i.stack.imgur.com/8QAfh.png
编辑:我假设你有一个整数数据类型,而不是 char(10)。当我发布这个答案时,我会说这是合理且有效的
yes
是灰色的,因为它是 char(10)
(来自刚刚发布的评论)
BookID int primary key identity
的新表时,我没有指定种子和增量,这是好的做法吗?因为我在 MSDN 中看到了文档如果两者都没有指定,则默认为 (1,1) 。
https://i.stack.imgur.com/SBQvM.jpg
https://i.stack.imgur.com/ueRYJ.jpg
CREATE TABLE Persons (
Personid int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
MS SQL Server 使用 IDENTITY 关键字来执行自动增量功能。
在上面的示例中,IDENTITY 的起始值为 1,每增加一条新记录,它就会增加 1。
提示:要指定“Personid”列应从值 10 开始并以 5 为增量,请将其更改为 IDENTITY(10,5)。
要将新记录插入“Persons”表,我们不必为“Personid”列指定值(将自动添加唯一值):
也许我遗漏了一些东西,但为什么这不适用于 SEQUENCE 对象?这不是你要找的吗?
例子:
CREATE SCHEMA blah.
GO
CREATE SEQUENCE blah.blahsequence
START WITH 1
INCREMENT BY 1
NO CYCLE;
CREATE TABLE blah.de_blah_blah
(numbers bigint PRIMARY KEY NOT NULL
......etc
在说 INSERT 命令中引用序列时,只需使用:
NEXT VALUE FOR blah.blahsequence
SEQUENCE 的更多信息和选项
IDENTITY
有时会跳转而留下空白,然后它会再次返回以填补这些空白。所以 IDENTITY
不保证总是增加条件
当您使用 Data Type: int 时,您可以选择要自动递增的行并转到列属性标签。在那里,您可以将身份设置为“是”。也可以在那里编辑自动增量的起始值。希望我能帮上忙;)
我遇到了这个问题,我已经创建了表,并且在不删除表的情况下无法更改它,所以我所做的是:(不确定他们何时实现此功能,但在 SQL 2016 中已实现)
右键单击对象资源管理器中的表:
Script Table as > DROP And CREATE To > New Query Editor Window
然后对 Josien 说的脚本进行编辑;滚动到 CREATE TABLE
所在的底部,找到您的主键并将 IDENTITY(1,1)
附加到逗号之前的末尾。运行脚本。
DROP 和 CREATE 脚本对我也很有帮助,因为 this issue.(生成的脚本会处理它。)
您可以在创建表时使用关键字 IDENTITY
作为列的数据类型以及 PRIMARY KEY
约束。
例如:
StudentNumber IDENTITY(1,1) PRIMARY KEY
在这里,第一个“1”表示起始值,第二个“1”是递增值。
如果表已填充,则无法将列更改为 IDENTITY 列或将其转换为非 IDENTITY 列。您需要导出所有数据,然后您可以将列类型更改为 IDENTITY,反之亦然,然后再导入数据。我知道这是一个痛苦的过程,但我相信除了使用本文中提到的序列之外别无选择。
ALTER TABLE ... SWITCH
来切换元数据,而无需接触数据。例如参见how to set auto increment after creating a table without any data loss?
如果您希望 ID 元素是连续的,请小心。因为 SQLSERVER ID 可以跳跃 1000 。
示例:在重新启动之前 ID=11 重新启动后,您在表中插入新行,则 ID 将为 1012。
不定期副业成功案例分享
IDENTITY
属性可以应用于任何数字数据类型(因此它可以是tinyint
、smallint
、int
、bigint
、numeric
、decimal
),唯一的限制是它不能表示小数(所以它不能是float
或real
,既不是numeric
也不是decimal
具有非零刻度 i>) 和 ofc,标识规范应与所选数据类型兼容。