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