SELECT INTO を使用した行の挿入

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

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

USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName, e.Title, a.AddressLine1, a.City, sp.Name AS [State/Province], a.PostalCode
INTO dbo.EmployeeAddresses
FROM Person.Contact AS c
JOIN HumanResources.Employee AS e ON e.ContactID = c.ContactID
JOIN HumanResources.EmployeeAddress AS ea ON ea.EmployeeID = e.EmployeeID
JOIN Person.Address AS a on a.AddressID = ea.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 バイトを超えて拡大しようとしています" というエラー メッセージが表示され、ステートメントの実行が停止されます。