对具有标识的列执行插入

更新页 :
页面创建日期 :

SQL Server 具有“标识”属性,该属性在添加记录时自动为特定列设置从 1 开始的序号。 例如,如果将 IDENTITY 设置为“A”列,然后添加三条记录,则 A 列将自动设置为“1”、“2”和“3”。如果添加三条记录,则 A 列将自动设置为“1”、“2”和“3”。

使用 INSERT 语句时,不需要显式设置值,因为它会自动设置值,但在某些情况下,您可能希望显式设置该值,例如使用外键。

例如,假设在“ID”列中具有“标识”属性的表,如图所示。

我认为在此表中插入包含“ID”列的值的 INSERT 语句如下所示:

insert into [テーブル名] ([ID], [Value]) values (1, 1)

但是,当我尝试运行它时,我认为会收到以下错误。

Ms 544, 级别 16, 状态 1, 行 1 当IDENTITY_INSERT设置为 OFF 时,无法在表“XXXXX”的标识列中插入显式值。

由于最初设置 IDENTITY 的列假定是自动填充的,因此无法显式设置值。

如果绝对想要进行设定,则必须将“IDENTITY_INSERT”设为“ON”,如错误消息所示。 在插入之前,如以下 SQL 所示,将“IDENTITY_INSERT”设置为“ON”,并在 INSERT 完成后将其更改回“OFF”。

set identity_insert [テーブル名] on;
insert into [テーブル名] ([ID], [Value]) values (1, 1)
set identity_insert [テーブル名] off;

-- 確認
select * from [テーブル名];

现在,您可以显式设置值并插入。 使用表的插入选择也有效。

设置 IDENTITY 的列将自动从 1 分配值,但如果显式设置该值(如上所示),则我担心接下来将分配多少个值。 在这种情况下,下一个分配的值是从添加到表中的值的下一个最大数字分配的,因此插入新记录不会重复该值。 (但是,由于故障等原因,有例外)