サーチ…


前書き

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'は各行に挿入される文字列定数です。

必要に応じて、同じテーブルからデータを選択して挿入することができます



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow