SELECT結果を使用してテーブルを作成する方法
SELECT *
INTO [新しいテーブル名]
FROM [既存のテーブル名]
WHERE [条件]
SELECT文 で INTO句 を使用すると、指定した名前で 新しいテーブル が作成され、検索結果が そのテーブル にコピーされます。 列のデータ型は元のテーブルから引き継がれますが、主キー、インデックス、トリガー、NOT NULL 以外の制約などは引き継がれません。
次の SQL は テーブル SampleTable2 を作成し、テーブル SampleTable1 のレコードを 全件 INSERT します。
SELECT *
INTO SampleTable2
FROM SampleTable1
列名を変更する
列名を変更するには、AS 句を使用して 列 の名称を指定します。SELECT [既存テーブルの列名] AS [新しい列名]
,[既存テーブルの列名] AS [新しい列名]
...
INTO [新しいテーブル名]
FROM [既存のテーブル名]
次の SQLは 列 UserName の名前を AccountName に変更しています。
SELECT UserName AS AccountName
INTO SampleTable2
FROM SampleTable1
リテラル値(文字列や数値など)の挿入
INTO句を使用する場合、列名が無いとエラーとなります。リテラル は列名を持たないため、AS 句を使用して列名を付ける必要があります。 列の型は リテラル の型が引き継がれますが、NULL の場合は int型 になります。次の SQL は 列 UserName と 列 Age を持つ、SampleTable テーブル を作成します。 列のデータ型は UserName列 が varchar(10)、 Age列 が int です。 新しいテーブルには 1 レコード('1234567890', NULL) 追加されます。
SELECT '1234567890' AS UserName
,NULL AS Age
INTO SampleTable
次の SQL は SampleTable1 テーブル の 全ての列 に加え、Version列 を持つ、SampleTable2 テーブルを作成します。Version列の値は、全ての行で 1 となります。
SELECT *
,1 AS Version
INTO SampleTable2
FROM SampleTable1
型を明示的に指定
CAST関数 または CONVERT関数 を使用して型変換を行います。 通常 NULLリテラル の場合は int型 になりますが、別の型にしたい場合にはこの方法を用います。次に CAST関数 を使用し、型を明示的に指定する SQL を示します。
SELECT CAST('1234567890' AS VARCHAR(256)) AS UserName
,CAST(NULL AS DECIMAL(10,1)) AS Age
INTO SampleTable
次の SQL は CAST関数 の代わりに CONVERT関数 を使用しています。
SELECT CONVERT(VARCHAR(256), '1234567890') AS UserName
,CONVERT(DECIMAL(10,1), NULL) AS Age
INTO SampleTable
INTO句 使用時の注意点
元のテーブルから引き継がれないもの
主キー、インデックス、トリガー、NOT NULL 以外の制約 は引き継がれません。検索結果が 0件 の場合
新しいテーブルは作成されますが、レコードは挿入されません。既に同名のテーブルが存在する場合
エラーが発生します。テーブルの再作成や、レコードの挿入は行われません。参考資料
- Microsoft公式ドキュメント - SELECT - INTO 句 (Transact-SQL)
- Microsoft公式ドキュメント - CAST および CONVERT (Transact-SQL)
検証環境
- Microsoft SQL Server 2022 (RTM-CU11) (KB5032679) - 16.0.4105.2 (X64) Nov 14 2023 18:33:19 Copyright (C) 2022 Microsoft Corporation Express Edition (64-bit) on Linux (Ubuntu 22.04.3 LTS) <X64>
- Docker image: mcr.microsoft.com/mssql/server:2022-latest
- Docker Desktop 4.26.1 (131620)
- Docker Engine Engine: 24.0.7
- Docker Compose v2.23.3-desktop.2
- Microsoft SQL Server Management Studio v19.0.1(19.0.20200.0+9286509b)
- Windows 10 Enterprise Version 22H2 OS Build 19045.3930 Experience: Windows Feature Experience Pack 1000.19053.1000.0