次の方法で共有


Execute SQL Statements in a Loop パッケージ サンプル

Execute SQL Statements in a Loop サンプル パッケージでは、フォルダ内のテキスト ファイルに保存された SQL ステートメントを反復処理する Foreach ループ コンテナが使用されます。Transact-SQL ステートメントでは、AdventureWorks データベースに 5 つのテーブルが作成されます。米国の有効な販売区域ごとに 1 つずつテーブルが作成されます。Foreach File 列挙子のコレクションの値が変数にマッピングされます。この変数は、ファイル接続マネージャの接続文字列の値を各列挙子で更新するため、プロパティ式で使用されます。

テキスト ファイルのデータにはいくつかの問題があります。たとえば、郵便番号が数値として正しく解釈されず、先頭の 0 が認識されないために、販売区域の識別子が無効になってしまう場合があります。パッケージのデータ フローでは、正しくない郵便番号が検出されて正しく修正され、無効な販売区域のデータ行をファイルに書き込み、有効なデータ行を AdventureWorks データベースの 5 つのテーブルの 1 つに送ります。

パッケージが再実行されると、テーブルはデータが挿入される前に削除されます。

このサンプルを英語版以外の Windows で開いたり、実行したりするとき、場合によっては、Program Files フォルダの名前をローカライズされた名前に置き換える必要があります。

ms160815.note(ja-jp,SQL.90).gif重要 :
提供されているサンプルは学習用です。これらは、運用環境での使用を目的としたものではなく、運用環境でのテストも実施されていません。Microsoft からは、これらのサンプルについてのテクニカル サポートは提供されません。

必要条件

このサンプル パッケージを実行する前に、次の条件が満たされていることを確認してください。

  • サンプル パッケージとサンプル パッケージが使用するデータ ファイルが、ローカルのハード ディスク ドライブにインストールされている。
  • AdventureWorks データベースがインストールされていて、そのデータベースに対する管理権限を持っている。
  • コマンド ラインからサンプル パッケージを実行する場合、SQL Server 2005 Integration Services (SSIS) がインストールされている。
  • SSIS デザイナでパッケージを開いてサンプル パッケージを実行する場合、Business Intelligence Development Studio がインストールされている。

サンプルのインストール方法の詳細については、SQL Server 2005 Books Online の「Integration Services サンプル パッケージのインストール」のトピックを参照してください。SQL Server 2005 のオリジナル リリース後にリリースされた新しいサンプルを含む、サンプルの最新バージョンを入手するには、「SQL Server 2005 Samples and Sample Databases (April 2006)」を参照してください。

サンプル パッケージの場所

サンプルが既定のインストール場所にインストールされた場合、SQL 実行ステートメント サンプル パッケージは次のフォルダにあります。

c:\Program Files\Microsoft SQL Server\90\Samples\Integration Services\Package Samples\ExecuteSQLStatementsInLoop Sample\ExecuteSQLStatementsInLoop\

このサンプル パッケージの実行には次のファイルが必要です。

ファイル 説明

ExecuteSQLStatementsInLoop.dtsx

パッケージ ファイルです。

Customer.txt

ソース データ ファイルです。

CustomersWithInvalidTerritoryID.txt

有効ではないデータの書き込み先のファイルです。

CreateProspectTableTerr1.sql

Territory1 テーブルを作成する Transact-SQL ステートメントです。

CreateProspectTableTerr2.sql

Territory2 テーブルを作成する Transact-SQL ステートメントです。

CreateProspectTableTerr3.sql

Territory3 テーブルを作成する Transact-SQL ステートメントです。

CreateProspectTableTerr4.sql

Territory4 テーブルを作成する Transact-SQL ステートメントです。

CreateProspectTableTerr5.sql

Territory5 テーブルを作成する Transact-SQL ステートメントです。

サンプルの実行

パッケージは、dtexec ユーティリティを使用してコマンド ラインから実行することができます。または、Business Intelligence Development Studio で実行することもできます。

英語版以外の Windows を使用している場合、パッケージで使用されているファイル接続マネージャの ConnectionString プロパティを更新しないと、サンプル パッケージを正常に実行できないことがあります。接続マネージャで使用されているパスが現在のコンピュータで有効かどうかを確認し、必要に応じて、Program Files フォルダのローカライズされた名前を使用するようにパスを変更してください。

このサンプルの場合、CreateTableSQL、Customers、および CustomersWithInvalidTerritoryID 接続マネージャで、ConnectionString プロパティの "Program Files" を変更しなければならない可能性があります。

dtexec を使用してパッケージを実行するには

  1. [コマンド プロンプト] ウィンドウを開きます。

  2. ディレクトリを変更する cd コマンドを使用して、dtexec のある、C:\Program Files\Microsoft SQL Server\90\DTS\Binn にディレクトリを変更します。

  3. 次のコマンドを入力します。

    dtexec /f "C:\Program Files\Microsoft SQL Server\90\Samples\Integration Services\Package Samples\ExecuteSQLStatementsInLoop Sample\ExecuteSQLStatementsInLoop\ExecuteSQLStatementsInLoop.dtsx"
    
  4. Enter キーを押します。

dtexec ユーティリティを使用してパッケージを実行する方法の詳細については、SQL Server 2005 Books Online のトピック「dtexec ユーティリティ」を参照してください。

Business Intelligence Development Studio でパッケージを実行するには

  1. Business Intelligence Development Studio を開きます。

  2. [ファイル] メニューの [開く] をポイントし、[プロジェクト/ソリューション] をクリックします。

  3. ExecuteSQLStatementsInLoop サンプル フォルダを探し、ExecuteSQLStatementsInLoop.sln という名前のファイルをダブルクリックします。

  4. [ソリューション エクスプローラ]で、[SSIS パッケージ] フォルダの ExecuteSQLStatementsInLoop.dtsx を右クリックして、[パッケージの実行] をクリックします。

ms160815.note(ja-jp,SQL.90).gif重要 :
初めてパッケージを実行する前に SSIS デザイナで Execute SQL Statements in a Loop サンプル パッケージを開く場合、データ フロー タスクに警告が含まれます。この警告は、パッケージが使用する SQL Server テーブルがまだ存在していないために発生します。テーブルは初めてパッケージを実行する際に作成されます。少なくとも一度パッケージを実行した後で、SSIS デザイナで再度パッケージを開いた場合には、警告は表示されません。パッケージは警告に関係なく正常に実行されます。

サンプルのコンポーネント

次の表に、サンプルで使用される Integration Services タスク、コンテナ、ソース、変換、変換先、および接続マネージャの一覧を示します。

要素 目的

ForEach ループ

Foreach ループ コンテナ Run SQL Statements は、Foreach File 列挙子を使用して、Transact-SQL ステートメントを含んでいるファイルの反復処理を実行します。Foreach ループ コンテナには、SQL 実行タスクが含まれます。

SQL 実行タスク

SQL 実行タスク Create Tables は、AdventureWorks データベースに接続し、テーブルを作成する 5 つの Transact-SQL ステートメントを実行します。

データ フロー タスク

データ フロー タスク Extract-Clean-Load Data は、テキスト ファイルからデータを抽出するデータ フローを実行して、データの削除と配布を行い、次にデータを AdventureWorks データベース内のテーブルに読み込みます。

フラット ファイル ソース

フラット ファイル ソース Extract data は、データをテキスト ファイルから抽出します。

条件分割変換

条件分割変換 Direct Rows by TerritoryID は、TerritoryID 列の値によって異なる出力に行を送ります。TerritoryID に無効な値を持つ行は、既定の出力に送られます。

派生列変換

派生列変換 Fix Postal Code は、4 文字構成の郵便番号の先頭に 0 を追加することで、郵便番号を削除します。

OLE DB 変換先

5 つの OLE DB 変換先は、データを 5 つの異なる領域テーブルに読み込みます。

ファイル接続マネージャ

ファイル接続マネージャ Create Tables SQL は、SQL CREATE TABLE ステートメントを含んでいるファイルに接続します。

フラット ファイル接続マネージャ

ファイル接続マネージャ Customers は、顧客ソース データを含んでいるテキスト ファイルに接続します。

ファイル接続マネージャ CustomsWithInvalidTerritoryId は、パッケージが無効なデータを書き込むテキスト ファイルに接続します。

OLE DB 接続マネージャ

OLE DB 接続マネージャ (local).AdventureWorks は、ローカル サーバー上の AdventureWorks データベースに接続します。

サンプル結果

Execute SQL Statements in a Loop サンプル パッケージの実行結果を表示するには、SQL Server Management Studio でクエリ ウィンドウを開き、次の Transact-SQL クエリを入力するかコピーして、クエリを実行します。

SELECT * FROM AdventureWorks.dbo.Territory1
SELECT * FROM AdventureWorks.dbo.Territory2
SELECT * FROM AdventureWorks.dbo.Territory3
SELECT * FROM AdventureWorks.dbo.Territory4
SELECT * FROM AdventureWorks.dbo.Territory5

このクエリでは、テキスト ファイルから抽出されたデータが取得され、SQL Server テーブルに読み込まれます。