對具有標識的列執行插入

更新頁 :
頁面創建日期 :

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 分配值,但如果顯式設置該值(如上所示),則我擔心接下來將分配多少個值。 在這種情況下,下一個分配的值是從添加到表中的值的下一個最大數位分配的,因此插入新記錄不會重複該值。 (但是,由於故障等原因,有例外)