テーブルにデータ(レコード)を挿入(追加・登録)する INSERT [SQLServer]

SQL Server ロゴ

様々な情報をデータベースに保存して管理するアプリケーションでは、C#などのプログラムを使用してテーブルにデータを録(追加)し、それを編集したり削除したりします。
プログラムからテーブルなどのデータベースのオブジェクトを操作する際は、SQLを使用してデータベースに命令を与えます。

データベースに情報を保存して管理するアプリケーションでは、SQLでのデータの操作が必須になります。

今回は、SQLを使用してテーブルにデータを挿入(追加・登録)する方法について紹介します。

記事内で使用するサンプルテーブル

本記事では、テーブルにデータを挿入する際に次の「書籍」テーブルを使用します。

テーブル定義

テーブルには、「書籍ID」「書籍名」「ISBN」の3つの列を作成します。

列名 データ型 NULLを許容 主キー
書籍ID int NO
書籍名 nvarchar(100) NO
ISBN char(21) NO
備考 nvarchar(200) YES

テーブルを作成するCREATE文(SQL)

テーブルを作成するSQLは次のようになります。

テーブルにデータ(レコード)を挿入する命令(ステートメント)

テーブルにデータを挿入する際は「INSERT」ステートメントを使用します。

INSERTステートメントの構文は次のようになります。

INSERTステートメントでは、まず「INSERT」と記述し、INSERTの後に空白文字(スペースや改行など)を記述して、その後に「INTO」を記述します。
INTOの後には空白文字を挟んでテーブル名を記述します。

テーブル名の後には括弧「()」の中に値を設定する列名を記述します。

テーブルの列名を指定したら、次は各列に設定する値を記述します。

列名を記述した時と同様に、括弧「()」の中に値を記述します。

複数の列、値がある場合は、それをカンマ「,」で区切って記述します。

ちなみに、列名と値の列挙部分を改行して記述するとSQLが見やすくなります。

データ挿入SQLの例

以下に「書籍」テーブルにデータ(レコード)を挿入するSQLの例を示します。

上記のSQLを実行すると、「よくわかる SQL Server 入門」という書籍の情報が1行テーブルに挿入されます。

列名の列挙部分と、値の列挙部分の数は同じにする必要があります。
列挙する数が違う場合は、エラーとなり次のようなエラーが返されます。

VALUES 句で指定された値よりも INSERT ステートメントの列数が多すぎます。VALUES 句の値の数は、INSERT ステートメントで指定される列数と一致させてください。

列名の列挙部分の順番と、値の列挙部分の順番は対応していますので、テーブルに作成されている列の順番通りでなくても問題ありません。
例えば以下のSQLは、先に示したSQLと同様の結果になります。

列の省略

テーブルにデータを挿入する際に列に値の設定を行わないものがあれば、その列を省略することができます。
例えば、「書籍」テーブルにINSERTする場合に「備考」列を省略すると、SQLは以下のような記述になります。

省略した列には、NULLが設定されます。

書籍ID 書籍名 ISBN 備考
1 よくわかる SQL Server 入門 ISBN978-4-0000-0000-0 NULL

省略した列にはNULLが設定されるので、省略した列のNULLが許容されていない場合は、当然エラーとなりINSERTステートメントの実行は失敗します。
失敗時は、以下のようなエラーメッセージが返されます。

テーブル ‘テーブル名’ の列 ‘列名’ に値 NULL を挿入できません。この列では NULL 値が許可されていません。INSERT は失敗します。

書籍テーブルの場合であれば、「書籍名」や「ISBN」ではNULLが許容されていませんのでエラーとなります。

テーブル ‘Database.dbo.書籍’ の列 ‘書籍名’ に値 NULL を挿入できません。この列では NULL 値が許可されていません。INSERT は失敗します。

列名の列挙部分の省略

テーブルに挿入する値(VALUES句に列挙する値)が、テーブルのすべての列に対するものである場合は、列名の記述(列挙部分)を省略することができます。

「書籍」テーブルであれば、「書籍ID」「書籍名」「ISBN」「備考」の4つの列がありますが、列名の列挙部分を省略すると次のようなSQLになります。

列名の列挙部分を省略する場合は、VALUES句に列挙する値を列の並び順通りに指定する必要があります。
「書籍」テーブルの場合は、「書籍ID」「書籍名」「ISBN」「備考」の順に値を指定します。

複数の行を1度のSQLで挿入する

ここまでの例では、INSERTステートメントを使用して1行のデータを挿入してきましたが、INSERTステートメントでは複数の行を一度に挿入することもできます。

複数行を一括して挿入する場合は、VALUES句に指定している括弧「()」の部分をカンマ「,」で区切って記述します。

複数の行を1回の命令(INSERT文)で挿入する方法の詳細については、以下の記事にまとめていますので参考にしてください。

1回のINSERT(インサートSQL)で複数行のレコードを一括挿入(追加)する
SQLServerやMySQLなどのデータベースで、テーブルにレコードをINSERT文使用して追加するには、通常は以下のように記述します。 ...