在SQL Server中,身份列指的是为每条插入的记录自动生成一个唯一的数值的列。身份列作为一个主键非常有用,因为每个值对每一行都是唯一的。
在本指南中,我们将了解如何使用SQL Server中的身份属性,以及如何向身份列手动插入数值。
SQL服务器的身份
列中的身份属性是由初始种子值和增量整数决定的。其语法如图所示。
身份**(种子**,增量)。
- 种子参数定义了在表中插入的第一个记录的值。
- 增量决定了前一行的哪个值被加入。
如果没有定义种子和增量参数,SQL Server默认的值分别为1,1。
示例查询语句说明了如何使用SQL Server的身份属性。
createdatabasetemporary_db;
usetemporary_db;
createtablesample_table(
idintnotnullidentity(1,1) primary key,
namevarchar(50),
);
insertintosample_table(name)
values ('Abigail Henderson'),
('Peter Miller'),
('Harris Gonzales'),
('Anne Jenkins'),
('Katherine Patterson');
select * fromsample_table;
我们应该有一个如图所示的表。
注意id列从一个值1开始,并在下一行递增1,这是由身份属性定义的。
SQL服务器的Identity_Insert
尽管身份属性是用来定义自动生成功能的,但你可能想手动编辑身份列的值。
这就是identity_insert命令发挥作用的地方。
SQL Server启用Identity_Insert
在默认情况下,SQL Server会阻止你手动编辑一个身份列的值。要使用它,你需要在你的目标表中启用它。
例如,如果你试图手动编辑上面示例表中的id列的值,你会得到一个错误,如图所示。
insertintosample_table(id) values (7);
使用下面的命令语法来打开或关闭identity_insert功能。
setidentity_inserttable_nameon/off;
例如,要为上面创建的sample_table打开identity_insert功能,我们可以这样做。
setidentity_insertsample_tableon;
一旦启用,你就可以向身份列插入数值。
insertintosample_table(id) values (7);
[/c]c
The query should return success:
[cc lang="mysql" width="100%" height="100%" escaped="true" theme="blackboard" nowrap="0"]
(1 row affected)
提示: 你只能在每个会话的单个表上设置身份插入。如果你试图在同一会话中对另一个表启用身份插入,SQL服务器将返回一个错误,如图所示。
结论
SQL Server身份属性允许定义一个基于种子和增量值的自动生成数值的列。然而,正如本教程中所讨论的,你可以使用身份插入功能来手动编辑身份列的值。我们希望你觉得这篇文章对你有帮助。