SQL 実行タスク
SQL 実行タスクは、パッケージ内の SQL ステートメントやストアド プロシージャを実行します。このタスクには、1 つの SQL ステートメントまたは順に実行される複数の SQL ステートメントを含めることができます。SQL 実行タスクは、次の目的で使用できます。
データを挿入する準備として、テーブルまたはビューを切り捨てます。
テーブル、ビューなどのデータベース オブジェクトを、作成、変更、および削除します。
データの読み込みを行う前にファクト テーブルとディメンション テーブルを再作成します。
ストアド プロシージャを実行します。
クエリから返された行セットを変数に保存します。
SQL 実行タスクは、次の方法で構成できます。
データベースへの接続に使用する接続マネージャの種類を指定します。
SQL ステートメントが返す結果セットの種類を指定します。
SQL ステートメントのタイムアウトを指定します。
SQL ステートメントの実行元を指定します。
SQL ステートメントの準備フェーズをタスクがスキップするかどうかを指定します。
ADO 接続の種類を使用している場合、SQL ステートメントがストアド プロシージャかどうかを指定する必要があります。その他の接続の種類では、このプロパティは読み取り専用であり、値は常に false です。
SQL 実行タスクを Foreach ループや For ループ コンテナと組み合わせて使用すると、複数の SQL ステートメントを実行できます。これらのコンテナには、パッケージ内での繰り返し制御フローが実装されているため、SQL 実行タスクを繰り返して実行できます。たとえば、Foreach ループ コンテナを使用すると、パッケージはフォルダ内のファイルを列挙して SQL 実行タスクを繰り返して実行し、各ファイルに格納された SQL ステートメントを実行します。
データ ソースへの接続
SQL 実行タスクでは、さまざまな種類の接続マネージャを使用して、SQL ステートメントまたはストアド プロシージャを実行するデータ ソースに接続できます。このタスクが使用できる接続の種類の一覧を、次の表に示します。
接続の種類 |
接続マネージャ |
---|---|
Excel |
|
OLE DB |
|
ODBC |
|
ADO |
|
ADO.NET |
|
SQLMOBILE |
SQL ステートメントの作成
このタスクでは、タスクのプロパティを SQL ステートメントの実行元として使用できます。タスクのプロパティには、ステートメント、単数または複数のステートメントが含まれるファイルへの接続、またはステートメントが含まれる変数名を含めることができます。SQL ステートメントは、実行元のデータベース管理システム (DBMS) の言語仕様に従って作成する必要があります。詳細については、「パッケージでのクエリの使用」を参照してください。
SQL ステートメントがファイルに格納されている場合、タスクはファイル接続マネージャを使用してそのファイルに接続します。詳細については、「ファイル接続マネージャ」を参照してください。
SSIS デザイナでは、[SQL 実行タスク エディタ] ダイアログ ボックスを使用して SQL ステートメントを入力できます。また、SQL クエリを作成するためのグラフィカル ユーザー インターフェイスであるクエリ ビルダを使用することもできます。詳細については、「[SQL 実行タスク エディタ] ([全般] タブ)」および「[クエリ ビルダ]」を参照してください。
注意 |
---|
有効な SQL ステートメントが SQL 実行タスクの外部に記述されている場合、SQL 実行タスクは解析に失敗することがあります。 |
複数のステートメントの一括送信
SQL 実行タスクに複数のステートメントが含まれる場合、それらをグループ化してバッチとして実行できます。バッチの開始と終了を知らせるには、GO コマンドを使用します。2 つの GO コマンド間にあるすべての SQL ステートメントは、OLE DB プロバイダにバッチで送信されて実行されます。SQL コマンドには、GO コマンドで分割された複数のバッチを含めることができます。
グループ化してバッチに含めることができる SQL ステートメントの種類には制限があります。詳細については、「ステートメントのバッチ」を参照してください。
SQL 実行タスクで SQL ステートメントのバッチを実行する場合、バッチには次の規則が適用されます。
結果セットを返すことができるのは、バッチの最初のステートメント 1 つだけです。
結果セットで結果のバインドを使用する場合、クエリは同じ数の列を返す必要があります。クエリが異なる数の列を返した場合、タスクは失敗します。ただし、タスクが失敗しても、そのタスクによって実行された DELETE や INSERT などのクエリは成功する場合があります。
結果のバインドで列名を使用する場合、クエリは、タスクで使用される結果セットの名前と同じ名前の列を返す必要があります。列が存在しない場合、タスクは失敗します。
タスクでパラメータのバインドを使用する場合、バッチ内のすべてのクエリは、同じ数と種類のパラメータを持つ必要があります。
パラメータ化 SQL コマンドの実行
SQL ステートメントとストアド プロシージャでは多くの場合、入力パラメータ、出力パラメータ、およびリターン コードを使用します。SQL 実行タスクでは、Input、Output、および ReturnValue パラメータ型がサポートされます。入力パラメータには Input 型、出力パラメータには Output 型、およびリターン コードには ReturnValue 型を使用します。
注意 |
---|
SQL 実行タスクでは、データ プロバイダがサポートしている場合のみ、パラメータを使用できます。 |
SQL 実行タスクにおけるパラメータとリターン コードの使用については、「SQL 実行タスクにおけるパラメータとリターン コードの使用」を参照してください。
結果セットの種類の指定
結果セットが SQL 実行タスクに返されるかどうかは、SQL コマンドの種類によって決まります。たとえば、通常、SELECT ステートメントは結果セットを返しますが、INSERT ステートメントは返しません。SELECT ステートメントからの結果セットに含まれる行数は、0 行、1 行、または多数行である場合があります。また、ストアド プロシージャは、プロシージャの実行状態を示すリターン コードという整数値を返すこともできます。この場合、結果セットは 1 行で構成されます。
SQL 実行タスクにおける SQL コマンドからの結果セットの取得については、「SQL 実行タスクにおける結果セットの使用」を参照してください。
SQL 実行タスクで使用できるカスタム ログ エントリ
次の表では、SQL 実行タスクのカスタム ログ エントリを説明します。詳細については、「パッケージへのログ機能の実装」および「ログ記録用のカスタム メッセージ」を参照してください。
ログ エントリ |
説明 |
---|---|
ExecuteSQLExecutingQuery |
SQL ステートメントの実行フェーズに関する情報を提供します。タスクがデータベースへの接続を取得したとき、SQL ステートメントの準備が開始されたとき、および SQL ステートメントの実行が完了した後に、ログ エントリが書き込まれます。準備フェーズのログ エントリには、タスクで使用される SQL ステートメントが含まれます。 |
SQL 実行タスクのトラブルシューティング
SQL 実行タスクによる外部データ プロバイダの呼び出しをログに記録できます。このログ機能を使用すると、SQL 実行タスクが実行する SQL コマンドに関するトラブルシューティングを行うことができます。SQL 実行タスクによる外部データ プロバイダの呼び出しのログを記録するには、パッケージ ログ記録を有効にして、パッケージ レベルで Diagnostic イベントを選択します。詳細については、「パッケージ実行のトラブルシューティング」を参照してください。
SQL コマンドまたはストアド プロシージャから、複数の結果セットが返される場合があります。このような結果セットには、SELECT クエリの結果である行セットだけでなく、RAISERROR ステートメントまたは PRINT ステートメントのエラーの結果である単一値も含まれています。1 つ目以外の結果セット内のエラーがタスクで無視されるかどうかは、使用する接続マネージャの種類によって異なります。
OLE DB 接続マネージャおよび ADO 接続マネージャを使用する場合、1 つ目の結果セット以外はすべて無視されます。したがって、これらの接続マネージャでは、SQL コマンドまたはストアド プロシージャから返されるエラーは、1 つ目の結果セットに含まれていない限りタスクで無視されます。
ODBC 接続マネージャおよび ADO.NET 接続マネージャを使用する場合、1 つ目の結果セット以外も無視されません。これらの接続マネージャでは、2 つ目以降の結果セットにエラーが含まれていると、エラーが発生してタスクが失敗します。
SQL 実行タスクの構成
プロパティはプログラムによって設定するか、または SSIS デザイナから設定できます。
SSIS デザイナで設定できるプロパティの詳細については、次のトピックのいずれかを参照してください。
SSIS デザイナでこれらのプロパティを設定する方法については、次のトピックを参照してください。
プログラムによる SQL 実行タスクの構成
プログラムによってこれらのプロパティを設定する方法については、次のトピックを参照してください。
|