次の方法で共有


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 を使用した行の挿入」を参照してください。