INSERT と SELECT を使用した行の追加
テーブルに行を追加するには、INSERT ステートメントおよび SELECT ステートメントを次のように使用します。
INSERT ステートメントを使用して、直接またはサブクエリ経由で値を指定します。
SELECT ステートメントを INTO 句と共に使用します。
INSERT を使用する
INSERT ステートメントは、テーブルに 1 行以上の新しい行を追加します。単純な処理では、INSERT は次の形式で指定します。
INSERT [INTO] table_or_view [(column_list)] data_values
INSERT ステートメントを実行すると、指定したテーブルまたはビューに data_values が 1 行以上の行として挿入されます。column_list はコンマで区切った列名のリストであり、データを入力する列を指定するときに使用します。column_list を指定しなかった場合は、テーブルまたはビュー内のすべての列にデータが入力されます。
column_list にテーブルまたはビュー内の一部の列のみを指定した場合、リストに指定されていない列には NULL 値 (または列に既定値が指定されている場合は既定値) が挿入されます。列のリストに指定されていない列はすべて、NULL 値を許容しているか、既定値が割り当てられている必要があります。
次の条件に該当する列に対しては、値が SQL Server データベース エンジンで生成されるので、INSERT ステートメントでは値を指定しません。
列の値を生成する IDENTITY プロパティを伴う列
NEWID 関数を使用して一意な GUID 値を生成する既定値を持つ列
計算列
計算列とは、式で定義される仮想的な列であり、CREATE TABLE ステートメント内の 1 つ以上の他の列から計算されます。この例を次に示します。
CREATE TABLE TestTable (ColA INT PRIMARY KEY, ColB INT NOT NULL, ColC AS (ColA + ColB) * 2);
次の例では、値が自動生成される列や既定値が設定されている列を持つテーブルに行を挿入する方法を示します。各 INSERT ステートメントは、すべての列ではなく一部の列の値を含む行を挿入しています。最後の INSERT ステートメントでは、どの列も指定せず、既定値のみを挿入しています。
USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.T1', 'U') IS NOT NULL
DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1
(
column_1 AS 'Computed column ' + column_2,
column_2 varchar(30)
CONSTRAINT default_name DEFAULT ('my column default'),
column_3 rowversion,
column_4 varchar(40) NULL
);
GO
INSERT INTO dbo.T1 (column_4)
VALUES ('Explicit value');
INSERT INTO dbo.T1 (column_2, column_4)
VALUES ('Explicit value', 'Explicit value');
INSERT INTO dbo.T1 (column_2)
VALUES ('Explicit value');
INSERT INTO T1 DEFAULT VALUES;
GO
SELECT column_1, column_2, column_3, column_4
FROM dbo.T1;
GO
VALUE 句および SELECT サブクエリと共に INSERT を使用する
入力されるデータ値は、列リストに一致している必要があります。データ値の個数は、列数と同じである必要があります。また、各データ値と対応する列はデータ型、有効桁数、および小数点以下桁数が一致している必要があります。データ値は、次の方法で指定できます。
VALUES 句を使用して、1 行のデータ値を指定します。次に例を示します。
INSERT INTO MyTable (PriKey, Description) VALUES (123, 'A description of part 123.');
詳細については、「INSERT と VALUES の使用による行の挿入」を参照してください。
SELECT サブクエリを使用して、1 行以上のデータ値を指定します。次に例を示します。
INSERT INTO MyTable (PriKey, Description) SELECT ForeignKey, Description FROM SomeView;
詳細については、「INSERT と SELECT サブクエリを使用した行の挿入」を参照してください。
INTO と共に SELECT を使用する
別のテーブルの値から新しいテーブルを作成するには、SELECT INTO を使用します。次に例を示します。
SELECT LastName, FirstName, Phone
INTO dbo.PhoneList492
FROM dbo.Customers
WHERE Phone LIKE '492%'
詳細については、「SELECT INTO を使用した行の挿入」を参照してください。