SELECT INTO を使用した行の挿入

SELECT INTO ステートメントでは、新しいテーブルが作成され、そのテーブルに SELECT ステートメントの結果セットが設定されます。SELECT INTO を使用すると、複数のテーブルまたはビューのデータを 1 つのテーブルに結合できます。また、リンク サーバーから選択したデータが含まれる新しいテーブルを作成することもできます。

新しいテーブルの構造は、選択リスト内の式の属性によって決まります。この例を次に示します。次の例では、各種の従業員テーブルと住所関連のテーブルから 7 つの列を選択して、テーブル dbo.EmployeeAddresses を作成します。

USE AdventureWorks2008R2;
GO
SELECT c.FirstName, c.LastName, e.JobTitle, a.AddressLine1, a.City, 
    sp.Name AS [State/Province], a.PostalCode
INTO dbo.EmployeeAddresses
FROM Person.Person AS c
    JOIN HumanResources.Employee AS e 
    ON e.BusinessEntityID = c.BusinessEntityID
    JOIN Person.BusinessEntityAddress AS bea
    ON e.BusinessEntityID = bea.BusinessEntityID
    JOIN Person.Address AS a
    ON bea.AddressID = a.AddressID
    JOIN Person.StateProvince as sp 
    ON sp.StateProvinceID = a.StateProvinceID;
GO

ソース テーブルがパーティション分割されている場合でも、SELECT INTO を使用してパーティション テーブルを作成することはできません。SELECT INTO では、ソース テーブルのパーティション構成が使用されません。代わりに、新しいテーブルが既定のファイル グループに作成されます。パーティション テーブルに行を挿入するには、まずパーティション テーブルを作成してから INSERT INTO…SELECT FROM ステートメントを使用する必要があります。

SELECT INTO ステートメントを使用して新しいテーブルを作成した場合は、FILESTREAM 属性は転送されません。FILESTREAM BLOB がコピーされ、varbinary(max) BLOB として新しいテーブルに格納されます。FILESTREAM BLOB が 2 GB を超えると、"LOB のサイズを、許容最大サイズ 2147483647 バイトを超えて拡大しようとしています" というエラー メッセージが表示され、ステートメントの実行が停止されます。