Microsoft SQL Server
INSERT INTO
サーチ…
前書き
INSERT INTOステートメントは、新しいレコードをテーブルに挿入するために使用されます。
INSERTのHello World INTOテーブル
CREATE TABLE MyTableName
(
Id INT,
MyColumnName NVARCHAR(1000)
)
GO
INSERT INTO MyTableName (Id, MyColumnName)
VALUES (1, N'Hello World!')
GO
特定の列のINSERT
特定の列を(すべてではなく)挿入するには、更新する列を指定する必要があります。
INSERT INTO USERS (FIRST_NAME, LAST_NAME)
VALUES ('Stephen', 'Jiang');
これは、リストしなかった列がNULL可能、ID、タイムスタンプのデータ型または計算列の場合にのみ機能します。または既定値の制約を持つ列。したがって、それらのいずれかが非null、非同一、非タイムスタンプ、計算されていないデフォルト以外の値の列である場合、この種の挿入を試みると、次のようなエラーメッセージが表示されます。該当するフィールドの値。
複数行のデータを挿入する
SQL Server 2008以降で複数の行のデータを挿入するには:
INSERT INTO USERS VALUES
(2, 'Michael', 'Blythe'),
(3, 'Linda', 'Mitchell'),
(4, 'Jillian', 'Carson'),
(5, 'Garrett', 'Vargas');
以前のバージョンのSQL Serverに複数行のデータを挿入するには、次のように "UNION ALL"を使用します。
INSERT INTO USERS (FIRST_NAME, LAST_NAME)
SELECT 'James', 'Bond' UNION ALL
SELECT 'Miss', 'Moneypenny' UNION ALL
SELECT 'Raoul', 'Silva'
INSERTクエリでは、 "INTO"キーワードはオプションです。別の警告は、SQL Serverは1つのINSERTで1000行しかサポートしないため、バッチで分割する必要があるということです。
1行のデータをINSERTする
1行のデータは、次の2つの方法で挿入できます。
INSERT INTO USERS(Id, FirstName, LastName)
VALUES (1, 'Mike', 'Jones');
または
INSERT INTO USERS
VALUES (1, 'Mike', 'Jones');
2番目のinsert文は、テーブルの列と同じ順序でのみ値を許可しますが、最初の挿入では、値の順序を次のように変更できます。
INSERT INTO USERS(FirstName, LastName, Id)
VALUES ('Mike', 'Jones', 1);
OUTPUTを使用して新しいIDを取得する
INSERTを実行すると、 OUTPUT INSERTED.ColumnName
を使用して新しく挿入された行から値を取得することができます。たとえば、新しく生成されたID - IDENTITY
列またはデフォルト値または計算値がある場合に便利です。
これをプログラムで呼び出すとき(例えばADO.netから)は、通常のクエリとして扱い、 SELECT
文を作成したかのように値を読み込みます。
-- CREATE TABLE OutputTest ([Id] INT NOT NULL PRIMARY KEY IDENTITY, [Name] NVARCHAR(50))
INSERT INTO OutputTest ([Name])
OUTPUT INSERTED.[Id]
VALUES ('Testing')
最近追加された行のIDがクエリまたはストアド・プロシージャの同じセット内に必要な場合。
-- CREATE a table variable having column with the same datatype of the ID
DECLARE @LastId TABLE ( id int);
INSERT INTO OutputTest ([Name])
OUTPUT INSERTED.[Id] INTO @LastId
VALUES ('Testing')
SELECT id FROM @LastId
-- We can set the value in a variable and use later in procedure
DECLARE @LatestId int = (SELECT id FROM @LastId)
SELECTクエリ結果からのINSERT
SQLクエリ(単一または複数の行)から取得したデータを挿入するには、
INSERT INTO Table_name (FirstName, LastName, Position)
SELECT FirstName, LastName, 'student' FROM Another_table_name
SELECTの 'student'は各行に挿入される文字列定数です。
必要に応じて、同じテーブルからデータを選択して挿入することができます