SQLShack (日本語)
この記事では、構文を含むSQL SELECTINTOステートメントについて説明します。パラメータと複数のテーブル、ファイルグループ、WHERE条件での使用
アプリケーションから、またはSSMSに直接データをSQLServerテーブルに定期的に挿入します。 INSERTINTOステートメントを使用してデータを挿入できます。これを行うには、Insert intoステートメントを使用してテーブルを作成できないため、データを挿入するためのテーブルがすでに配置されている必要があります。
INSERTINTOステートメントを使用して次のタスクを実行する必要があります。
- 適切なデータ型を使用してテーブル構造を作成する
- データを挿入する
しかし、良いニュースは、両方のタスクを実行できることです。 SQL SELECT INTOステートメントを使用して、エレガントに一緒に。 Selectステートメントによって返される列のテーブル構造を作成します。
テーブル内の多くのレコードを更新するとします。 SELECT INTOステートメントを使用して、ソーステーブルの時点での既存の構造でバックアップテーブルを作成できます。この記事でSELECTINTOについて見ていきましょう。
SELECTINTOステートメントの構文
1
2
3
4
|
SELECT column1、column2 .. .ColumnN
INTO New_table
FROMテーブル
;
|
SELECTINTOステートメントのパラメーター
- 列リスト:取得して新しいテーブルに挿入する列を指定する必要があります
- New_table:ここで新しいテーブル名を指定できます。 SQL Serverは、列リストに記載されている列を含む新しいテーブルを作成します。これを使用して既存のテーブルを置き換えることはできません。テーブル名は一意である必要があります
- テーブル:レコードを取得する場所からテーブルが含まれています。ここでも、適切な結合句を使用して複数のテーブルを定義できます。
- WHERE条件:Where句を使用してレコードをフィルタリングできます。これはオプションの句です。
例を使用してSQLSELECTINTOステートメントを調べてみましょう。
環境:
この例では、サンプルデータベースAdventureWorks2017。テーブルからレコードを選択し、SELECTINTOステートメントを使用して新しいテーブルを作成するとします。新しいテーブルでのみ選択された列が必要です。必要な列を使用して、Employeeテーブルでselectステートメントを実行しましょう。
SQL SELECTINTOを実行する前にステートメントでは、sp_helpコマンドを使用してEmployee_DemoテーブルがAdventureWorks2017データベースに存在しないことを確認できます。
1
|
sp_help “..”
|
次のスクリーンショットでは、Employee_Demoテーブルがデータベースに存在しないことがわかります。
次のクエリを実行して、SELECTINTOステートメントを使用して新しいテーブルを作成します。
Azure DataStudioで次の出力メッセージが表示されます。影響を受ける行数は10であることに注意してください。クエリでは、従業員テーブルから上位10レコードを選択しました。
新しく作成されたテーブルEmployee_Demoのデータにアクセスし、以前のselectステートメントと同じレコードが含まれていることを確認できます。
SQL SELECTINTOステートメントで列のプロパティを指定しませんでした。ソーステーブルと宛先テーブルの列とそれらのプロパティを比較してみましょう。
EmployeeテーブルとEmployee_Demoテーブルの両方でsp_help「tablename」コマンドを実行できます。両方のテーブルの出力をExcelでコピーしました(選択した列用)。次のスクリーンショットでは、列のデータ型とそのプロパティが類似していることがわかります。
前のSQLSELECTINTOステートメント、ソーステーブル(Employee)のいくつかの列から宛先テーブル(Employee_Demo)を準備しました。
次のクエリを使用して、Employeeテーブルのすべての列を含む別のテーブルを作成しましょう。
出力では、Employee_Allテーブルに290行が挿入されていることがわかります。
SELECTINTOを確認しましたステートメントは、列リストで指定された列を持つ新しいテーブルを作成します。宛先テーブルにも同様のデータ型が作成されます。
ソーステーブルに主キーと外部キーがあるとします。ソーステーブルと同様に、主キーと外部キーを作成しますか?いいえ、SQL SELECTINTOステートメントは宛先テーブルにキーを作成しません。必要に応じて、宛先テーブルにキーを定義できます。次のセクションでこれを確認しましょう。
前の例では、Employeeテーブルに定義された主キーと外部キーが含まれています。 INFORMATION_SCHEMAビューを使用して、既存のキーのリストを取得できます。次のコードを実行すると、Employeeテーブルに既存の主キーと外部キーが返されます。
従業員テーブルには、主キーと外部キーが含まれています。
EmployeeテーブルからEmployee_Allのすべての列をコピーしました。ここで、宛先テーブルの主キーと外部キーを確認する必要があります。
宛先テーブルにキーが含まれていないことがわかります。これにより、宛先テーブルでキーを定義する柔軟性が得られます。
SQL SELECT INTO –複数のテーブルからのデータの挿入
前の例では、テーブルを作成しました単一のテーブルEmployeeからのSELECTINTOステートメントを使用します。複数のテーブルを結合し、SELECT INTOステートメントを使用して、データを含む新しいテーブルを作成することもできます。このセクションでは、複数のテーブルを結合します。次のクエリでは、AdventureWorks2017で次のテーブルを結合しました。
次のクエリを実行します。結合条件と上記の列に基づいて、複数のテーブルから結果が得られます。
クエリを実行すると、SQL SELECTINTOステートメントの出力が続きます。
上記のテーブルを使用して返されたデータを使用してテーブルを作成します。 SQL SELECTINTOステートメントを実行してみましょう。
を作成します。テーブルにデータを挿入します。 selectステートメントでこのテーブルのレコードを確認できます。
複数のテーブルを結合して、出力を作成できることがわかります。 SELECTINTOステートメントを使用したテーブル。
宛先テーブルのデータ型の定義を処理する必要はありません。テーブルを手動で作成する場合は、各列のデータ型を確認し、それに応じてデータ型を定義する必要があります。データ型間に不一致がある場合は、次のようなエラーメッセージが表示されることがあります。
エラー1:データ型の不一致が原因です
メッセージ245、レベル16、状態1 、1行目
varchar値「GG」をデータ型intに変換するときに変換に失敗しました。
エラー2:メッセージ8152、レベル16、状態30、2行目
文字列または、バイナリデータが切り捨てられます。
SQL SELECT INTOステートメントを使用してデータを挿入しているときに、これらのエラーは発生しません。ただし、この方法を使用して既存のテーブルにデータを挿入することはできません。
SELECT INTO –ファイルグループの指定
前のセクションでは、新しいテーブルを作成してデータを挿入できることを確認しました。既存のテーブルからのSQLSELECTINTOステートメントを使用します。デフォルトのファイルグループにのみテーブルを作成します。 SQL Server 2016まで、特定のファイルグループを指定することはできません。SQLServer2017では、新しいテーブルを作成する特定のファイルグループを指定できます。 SQL Serverは、その特定の検証テーブルファイルグループに新しいテーブルを作成します。 SQL Server 2017以降でファイルグループを指定しない場合、デフォルトのファイルグループでテーブルが作成されます。
注:SQL Server2016以前のSQLSELECTINTOでファイルグループを指定することはできません。
AdventureWorks2017データベースに新しいファイルグループを追加しましょう。データベースを右クリックして[ファイルグループ]に移動します。
この[ファイルグループ]ページで、[ファイルグループの追加]をクリックし、ファイルグループの名前を指定します。
ここで、[ファイル]をクリックすると、既存のデータベースファイル(データとログファイル)が一覧表示されます。このページで、新しいデータファイルを追加し、ドロップダウンリストからFileGroupを指定します。先ほど作成したFileGroupである必要があります。
INSERTFILEFilegroupにSQLテーブルを作成します。このファイルグループをデフォルトのファイルグループとして設定していません。
次のクエリでは、ON句を使用してファイルグループ名を指定したことがわかります。通常のSQLSELECT INTOステートメントと同様に機能しますが、ファイルグループが異なります。
1
2
3
|
select * into person.person_temp
ON INSERTFILE –FILEGROUP NAME
from person.person
|
テーブルが作成されたら、この新しく作成されたテーブルに対してsp_helpコマンドを実行します。次のスクリーンショットでは、テーブルがINSERTFILEFileGroupにあることを確認できます。これは、前に作成したFileGroupです。
これはテーブルのプロパティからも確認できます。 SSMSのテーブルを右クリックします。 [ストレージ]セクションに、目的のファイルグループが表示されます。
Where条件でSELECTINTO
レコードがほとんどないSQLSELECTINTOステートメントを使用してテーブルを作成するとします。 selectステートメントと同様のWhere句を使用できます。次のクエリでは、%Duf%のような姓の人のperson.person_WCテーブルを作成します。
1
2
3
4
|
選択* into person.person_WC
ONINSERTFILE-テーブルファイルグループを確認します
from person.person
ここで、姓は「%Duf%」のようになります
|
結論
この記事では、SQLについて説明しました。 SELECTINTOステートメントとその使用シナリオ。データ型を指定せずにテーブルのコピーを作成すると便利なコマンドです。
- 作成者
- 最近の投稿
彼は、SQL Server Always On可用性グループに関する50部構成のシリーズで、単一のトピックに関する記事の最大の無料オンラインコレクションの1つを作成しています。 SQL Serverコミュニティへの貢献に基づいて、彼はSQLShackで2020年と2021年に継続的に名誉ある「年間最優秀著者」を含むさまざまな賞を受賞しています。
Rajは常に新しい課題に関心を持っているため、コンサルティングが必要な場合は彼の著作で取り上げられている主題についてのヘルプは、rajendra.gupta16 @ gmail.comに連絡できます。
RajendraGuptaによる投稿をすべて表示
- AWSのマイナーバージョンとメジャーバージョンのアップグレードの実行RDS SQLServer- 2021年1月29日
- AWS RDSPostgreSQLインスタンスのデプロイ-2021年1月27日
- AWSDMSを使用したオンプレミスSQLデータベースのAWSRDS SQLServerへの移行-1月25日、2021