IDENTITY 列 (オートインクリメント列) に明示的に値を設定してレコードを挿入する - SQL Server

SQL ServerでIDENTITYに指定された列 (ID値を自動採番しオートインクリメントする列) に明示的に値を設定してレコードを挿入する手順を紹介します。

概要

IDENTITYに指定された列に明示的に値を設定してレコードを挿入する場合は、SET IDENTITY_INSERT を利用します。

書式

SET IDENTITY_INSERT (テーブル名) (value)

valueの値は以下となります。
意味
ON明示的に値を指定した挿入を有効にします
OFF明示的に値を指定した挿入を無効にします

明示的に値を指定した挿入を有効にする場合

SET IDENTITY_INSERT Contents ON

明示的に値を指定した挿入を無効にする場合

SET IDENTITY_INSERT Contents OFF


SET IDENTITY_INSERT を利用して ON にした場合は、利用後には OFFに戻しておきます。

手順

下記のSQLを実行しテーブルを作成します。id列は IDENTITY に設定されており、自動でid番号が採番される列です。
CREATE TABLE [dbo].[Products](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[name] [nchar](128) NULL,
	[price] [decimal](18, 0) NULL,
	[category] [nchar](10) NULL,
)

失敗する例

下記のSQLを実行すると、下記のエラーメッセージが表示されます。
エラーメッセージ
IDENTITY_INSERT が OFF に設定されているときは、テーブル 'Products' の ID 列に明示的な値を挿入できません。
insert into Products (id, name, price, category) values (3,'penguin', 2400, 'bird')

挿入できる例

SET IDENTITY_INSERT Products ON
insert into Products (id, name, price, category) values (3,'penguin', 2400, 'bird')
SET IDENTITY_INSERT Products OFF


IDENTITYに指定された列idの値に、指定した値でレコードが追加できています。


著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2023-12-08
作成日: 2016-11-07
iPentec all rights reserverd.