SQL Serverデータベースの管理者または開発者として作業している場合、他のデータソースと通信せずに、孤立したSQLServerの世界に住むことはできません。たとえば、Excel、Access、またはCSVファイルからSQLServerテーブルにデータをインポートするように要求されない日はめったにありません。または、逆に、SQL Serverデータベーステーブルの1つを外部ファイルにエクスポートして、このテーブルを別のデータベースエンジンで使用したり、対応するチームが外部で分析したりできるようにします。
SQL Serverには、既存のSQL ServerデータベーステーブルをExcelまたはテキストファイルにエクスポートし、外部データソースから新規または既存のSQLServerデータベーステーブルにデータをインポートするために使用できるいくつかのメソッドが用意されています。この記事では、これらすべての方法について徐々に説明します。
BCPユーティリティ
バルクコピープログラムユーティリティは、BCPとも呼ばれ、オペレーティングシステムのデータファイルからSQL Serverデータベーステーブルに多数の行をインポートしたり、既存のSQLServerデータベーステーブルをオペレーティングシステムにエクスポートしたりするために使用できるコマンドラインユーティリティです。システムデータファイル。
BCPツールの構文には、さまざまなオプションが含まれています。これらは最も一般的に使用されるものです:
- SQL Serverデータベーステーブルまたはビューの名前–これは、データエクスポートプロセスの場合はデータソースとして機能し、データインポートプロセスの場合は宛先として機能します。
- データの方向。IN データのインポートとOUTを示します データのエクスポートを示します。
- データインポートプロセスの場合はソースとして、データエクスポートプロセスの場合は宛先として機能するローカルデータファイルの名前。
- -Sサーバー\インスタンス –これはSQLServerインスタンス名を指定するために使用されます。
- –d –これは、ソーステーブルまたは宛先テーブルを含むデータベースを指定するために使用されます。
- -T –これは、Windows認証を使用してSQLServerに接続することを指定するために使用されます。
- -Uユーザー名 および-Pパスワード –これらは、SQLServerインスタンスへの接続に使用されるユーザー名とパスワードを指定します。
- Bulk Copy ProgramユーティリティはBCPとも呼ばれ、オペレーティングシステムのデータファイルからSQL Serverデータベーステーブルに多数の行をインポートしたり、既存のSQLServerデータベーステーブルをエクスポートしたりするために使用できるコマンドラインユーティリティです。オペレーティングシステムのデータファイルに。 –これらは、ソースまたは宛先データファイルの形式と、そのデータファイルで使用される区切り文字を指定するために使用されます。
たとえば、以下のBCPコマンドはエクスポートに使用されます 次のように、Employee_Mainデータベーステーブルの内容をまとめてCSVファイルにまとめます。
bcp AdventureWorks2016CTP3.dbo.Employee_Main out C:\ Test \ Employees.csv -S MININT-QQBE87A -T -c -t、-r \ n
以下の結果に示すように、このデータはすぐにCSVファイルにコピーされます。
CSVファイルのコンテンツをデータベーステーブルにインポートするには、次のBCPコマンドを使用して、これを一括ですばやく実行できます。
C:\ Test\Employees.csvのbcpAdventureWorks.dbo.Employee_Main-S MININT-QQBE87A -T -c -t、-r \ n
そして、以下の結果に示すように、データがデータベーステーブルに挿入されます。
適切なオプションを使用してこれらのコマンドを準備するために数分を費やすことで、BCPユーティリティを使用して、テキストデータファイルからデータをインポートしたり、テキストデータファイルにエクスポートしたりすることが簡単にできます。
バルクインサート
BULK INSERT T-SQL ステートメントはBCPINと同様に機能します コマンドであり、SQLServerサービスからアクセス可能なデータファイルからSQLServerデータベーステーブルにデータをインポートするために使用されます。これらはすべてSQLServer内で直接実行されます。 BCP INコマンドとは異なり、BULK INSERTステートメントは、制御下で実行されている単一のSQLServerトランザクションで他の操作とグループ化できます。
以下のBULKINSERTT-SQLステートメントを使用して、CSVファイルから既存のデータベーステーブルにデータをインポートし、以下に示すように、列と行の両方の区切り文字を指定できます。
BULK INSERT AdventureWorks.dbo.Employee_Main FROM 'C:\Test\Employees.csv' WITH ( FIELDTERMINATOR =',', ROWTERMINATOR ='\n' ); GO
OPENROWSET
OPENROWSET関数は、OLEDB接続プロバイダーを使用してデータソースに接続し、指定されたT-SQLクエリを使用してそのデータソースからデータを取得するために使用されます。 BCPおよびBULKINSERTメソッドに対するOPENROWSET関数の主な利点は次のとおりです。
- WHERE句を使用して、OPENROWSETステートメントによって取得されたデータをフィルタリングできます
- INSERTステートメントだけでなく、データソースからデータを読み取るためのSELECTステートメントで使用できます
OPENROWSETステートメントを使用するには、アドホック分散クエリを有効にする必要があります。 以下のスクリプトを使用して、最初にシステム構成オプションを選択します。
sp_configure 'show advanced options', 1; RECONFIGURE; GO sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE; GO
アドホック分散クエリシステム構成オプションを有効にした後、以下のT-SQLクエリに示すように、OPENROWSET関数を使用して、事前に定義されたデータ形式のCSVファイルからSQLServerデータベーステーブルにデータをインポートできます。
INSERT INTO [AdventureWorks].[dbo].[Employee_Main] ([EMP_FirsrName],[EMP_LastName],[EMP_BirthDate],[EMP_PhoneNumber]) SELECT [EMP_FirsrName],[EMP_LastName],[EMP_BirthDate],[EMP_PhoneNumber] FROM OPENROWSET( BULK 'C:\Test\Employees.csv', FORMATFILE = 'C:\Test\Fmt.xml' ) AS rows;
リンクサーバー
SQL Serverリンクサーバーは、SQLServerデータベースエンジンがSQLServerインスタンスの外部にあるさまざまな種類のOLEDBデータソースに接続できるように構成されたサーバーオブジェクトです。リンクサーバーは、以下に示すように、SQL ServerManagementStudioまたはT-SQLコマンドを使用して簡単に作成できます。
リンクサーバーを作成すると、以下のT-SQLクエリに示すように、リモートデータソースにアクセスして対応するデータをSQLServerデータベーステーブルにインポートするために簡単に使用できます。
INSERT INTO [AdventureWorks].[dbo].[Employee_Main] ([EMP_FirsrName],[EMP_LastName],[EMP_BirthDate],[EMP_PhoneNumber],[EMP_Address]) SELECT [EMP_FirsrName],[EMP_LastName],[EMP_BirthDate],[EMP_PhoneNumber],[EMP_Address] FROM TEST...Employee_Main$
SQLServerエクスポート/インポートウィザード
SQL Serverのエクスポートとインポートウィザードは、すぐに使用したり、後で使用するために保存したりできるSQL ServerIntegrationServiceパッケージを作成するためのシンプルなインターフェイスを提供します。これらのパッケージを使用すると、単純なフラットファイルから始まり、より複雑なデータベースエンジンで終わる、さまざまなデータソースからデータをインポートおよびエクスポートできます。
エクスポートおよびインポートウィザードを使用して、たとえば、Excelデータソースから既存のデータベーステーブルにデータをインポートできます。次の手順でこのプロセスについて説明します。
- SQL Server Management Studioのオブジェクトエクスプローラーで、データを書き込むテーブルを含むAdventureWorksデータベースを右クリックします。次に、データのインポートを選択します タスクのオプション サブメニュー:
- SQLServerのインポートおよびエクスポートウィザードが開きます。 データソースの選択 ウィンドウで、データソースのタイプを指定します。この特定の例では、Microsoft Excelと、目的のExcelファイルのフルパスを選択します。指定したら、次へをクリックします ボタン:
- 目的地を選択 ウィンドウでは、ソースデータが書き込まれる宛先のタイプを指定するように求められます。この例では、SQLServerデータベースです。また、サーバー名、資格情報、および宛先テーブルが配置されているデータベースの名前を指定するように求められます。この情報をすべて入力したら、[次へ]をクリックします 続行します:
- テーブルのコピーまたはクエリの指定 ウィンドウでは、すべてのデータをソースから既存または新しいテーブルにコピーするか、特定の範囲のデータを取得するためにカスタマイズされたクエリを作成するかを選択できます。これが決まったら、次へをクリックします ボタン:
- ソーステーブルとビューの選択 ウィンドウで、データソースのソースシートまたはテーブルと、ソースデータが書き込まれる宛先テーブルを指定します。ソースをプレビューし、ソーステーブルと宛先テーブルの間の列のマッピングを確認し、データを既存のテーブルに追加するか、新しく生成されたテーブルに追加するかを指定することができます。 次へをクリックします 続行するボタン:
- パッケージの保存と実行 ウィンドウでは、インポートおよびエクスポートウィザード内で作成されたSSISパッケージを保存してすぐに実行するか、スケジュールまたは後で実行するために保存するかを選択できます。 次へをクリックします 続行するボタン:
- ウィザードを完了する ウィンドウに、選択したオプションと提供された設定の概要が表示されます。 完了をクリックします データのコピーを開始するボタン:
- コピープロセスが完了すると、ウィザードは各テーブルにコピーされたレコードの数を表示します。エラーがない場合は、閉じるをクリックできます。 ウィンドウを閉じるためのボタン: 前の例から、インポートおよびエクスポートウィザードを使用して、異なるタイプ間でデータを簡単にコピーできることがわかります。テーブル間の関係を考慮せずに、データのソースと宛先のテーブルに親テーブルの列の1つを参照する外部キー制約がある場合は、データコピープロセスの順序を手動で管理する必要があります。さらに、新しいデータインポートプロセスを開始するには、ウィザードを閉じてから再度開く必要があります。
dbForgeデータポンプ
dbForge Data Pumpは、SQL ServerManagementStudioにアドインとして含まれているサードパーティのツールです。 SQLServerとさまざまな外部データソース間でデータを簡単に移行するために使用できます。繰り返し発生するシナリオに利用できる多数の高度なオプションとテンプレートを使用して、一般的に使用される10以上のデータ形式(テキスト、MS Excel、XML、CSV、JSONなど)からインポートおよびエクスポートできます。
DevartダウンロードページからdbForgeDataPumpをダウンロードした後、以下に示すように、SSMSツールアドインとしてマシンにインストールする必要があります。
データのエクスポート
dbForge Data PumpをSSMS内で使用して、SQL Serverデータベーステーブルからデータをエクスポートしたり、HTML、テキスト、MS Excel、MS Excel 2007、MS Access、RTF、PDF、XML、CSV、 ODBC、DBF(Foxpro、dBase III、dBase IV、dBase 7)、SQL、JSON。
特定のSQLServerテーブルからデータをエクスポートするには、次の手順に従います。
- SSMSを介してSQLServerインスタンスに接続します。オブジェクトエクスプローラーから、ソーステーブルを含むデータベースを右クリックし、データのエクスポートを選択します。 データポンプから サブメニュー:
- エクスポート形式 ウィンドウで、ソーステーブルデータのエクスポート先のファイルの形式を選択するか、以前に保存したテンプレートをロードします。この例では、MSExcel2007を選択します。次へをクリックします。 続行するボタン:
- [ソース]ウィンドウで、接続の詳細を確認し、エクスポートするソースデータを含むテーブルを選択します。 次へをクリックします 続行します:
- オプション ウィンドウで、エクスポートされたデータのテーブルグリッドのさまざまなカスタマイズ可能なオプションを確認して設定します。次に、[次へ]をクリックします 続行します:
- データ形式 ウィンドウ、列の下 タブで、エクスポートする列を選択し、それらのデータ型を確認します。 また、形式 タブで、選択した列のさまざまなデータ型の形式を設定します。 次へをクリックします 続行するボタン:
- ページの印刷設定 ウィンドウでは、印刷用にエクスポートされたファイルページにさまざまなオプションを設定できます。 次へをクリックします 続行します:
- エクスポートされた行 ウィンドウで、ソーステーブルからエクスポートする行の範囲を指定するか、すべてのテーブル行をエクスポートすることを選択します。 次へをクリックします 続行します:
- エラー処理 ウィンドウには、エラーが発生した場合の処理方法と実行結果をログに記録する場所を指定するために使用できるいくつかのオプションがあります。 [テンプレートを保存]をクリックします 将来使用するテンプレートとして設定を保存するか、エクスポートを押します 以下に示すように、ボタンをクリックしてデータのエクスポートプロセスを開始します。 データのエクスポートプロセス中に、Data Pumpは、からコピーされたレコードの数を表示する情報メッセージを提供します。以下に示すように、現在のテーブル: データのエクスポートプロセスが正常に完了すると、エクスポートプロセスの概要が表示されます。生成されたファイルまたは含まれているフォルダーを開き、ツールを閉じて再度開くことなく、同じページからさらにデータをエクスポートするためのオプションが提供されます。
データのインポート
dbForge Data PumpをSSMS内で使用して、SQLServerデータベーステーブルにデータをインポートできます。次の9つの広く使用されているデータ形式がサポートされています:テキスト、MS Excel、MS Excel 2007、MS Access、XML、CSV、ODBC、DBF(Foxpro、dBase III、dBase IV、dBase 7)およびJSON。
Excelシートから特定のSQLServerテーブルにデータをインポートするには、次の手順に従います。
- SSMSを使用してSQLServerインスタンスに接続します。オブジェクトエクスプローラーから、宛先データベーステーブルを含むデータベースを右クリックし、インポートを選択します。 データ データポンプから サブメニュー:
- ソースファイル ウィンドウで、ソースファイルの形式を選択するか、以前に保存したテンプレートをロードしてインポートプロセスを実行します。この例では、Microsoft Excel 2007を使用し、参照をクリックします。 ボタンをクリックしてExcelシートを検索します。 次へをクリックします 続行するボタン:
- 目的地 ウィンドウで、接続情報を確認し、提供されたリストからデータを新しいテーブルにインポートするか、既存のテーブルにインポートするかを指定します。 次へをクリックします 続行します:
- オプション ウィンドウでは、インポートする前にソースファイルデータをプレビューする機能を使用して、ソースファイル内のヘッダーとデータの場所を指定するさまざまなオプションを設定できます。 次へをクリックします 続行します:
- データ形式 ウィンドウでは、データベーステーブルにインポートする前に、ソースファイル内のさまざまなテキスト列のデータ型形式を調整できます。 次へをクリックします 続行します:
- マッピング ウィンドウでは、変更の実行後にデータをプレビューする機能を使用して、ソースファイルから宛先データベーステーブルに列をマップできます。 次へをクリックします 続行します:
- モードの場合 ウィンドウでは、宛先テーブルの既存のデータにデータを追加して一括挿入を実行したり、単一のトランザクションでデータをインポートしたりするなど、データインポートモードを指定できます。 次へをクリックします 続行します:
- 出力 ウィンドウでは、データインポートスクリプトを生成または保存するか、データインポートプロセスをすぐに続行するかを指定できます。 次へをクリックします 続行します:
- エラー処理 ウィンドウには、エラーが発生した場合の動作方法と実行結果をログに記録する場所を指定するために使用できるいくつかのオプションがあります。 テンプレートの保存をクリックします 将来使用するテンプレートとして設定を保存するか、インポート 以下に示すように、ボタンをクリックしてデータのインポートプロセスを開始します。
- インポートプロセスが正常に完了すると、ウィザードはインポートされたレコードの数の概要を表示します。エラーが発生した場合にエラーログファイルを確認し、ツールを閉じて再度開くことなく、同じウィンドウから他のファイルをインポートすることができます。
前の例から、dbForge Data Pumpツールが、さまざまなデータファイル形式との間でデータをインポートおよびエクスポートする機能を提供していることは明らかです。これ専用のウィザードは、構成が簡単で、さまざまなオプションが豊富で、開発作業を必要としません。試してみる価値があります!