如何使用SQL Server中的身份属性,以及如何向身份列手动插入数值

114 阅读2分钟

在SQL Server中,身份列指的是为每条插入的记录自动生成一个唯一的数值的列。身份列作为一个主键非常有用,因为每个值对每一行都是唯一的。

在本指南中,我们将了解如何使用SQL Server中的身份属性,以及如何向身份列手动插入数值。

SQL服务器的身份

列中的身份属性是由初始种子值和增量整数决定的。其语法如图所示。

身份**(种子**,增量)。

  1. 种子参数定义了在表中插入的第一个记录的值。
  2. 增量决定了前一行的哪个值被加入。

如果没有定义种子和增量参数,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身份属性允许定义一个基于种子和增量值的自动生成数值的列。然而,正如本教程中所讨论的,你可以使用身份插入功能来手动编辑身份列的值。我们希望你觉得这篇文章对你有帮助。