Integration Services デザイナーの [制御フロー] ウィンドウで使用できるスクリプト タスクと、[データ フロー] ウィンドウで使用できるスクリプト コンポーネントには、Integration Services パッケージ内で非常に異なる目的があります。 タスクは汎用制御フロー ツールですが、コンポーネントはデータ フローのソース、変換、または変換先として機能します。 ただし、目的は異なりますが、スクリプト タスクとスクリプト コンポーネントには、使用するコーディング ツールと、開発者が使用できるパッケージ内のオブジェクトに類似点があります。 それらの類似点と相違点を理解することは、タスクとコンポーネントの両方をより効果的に使用するのに役立つ場合があります。
スクリプト タスクとスクリプト コンポーネントの類似点
スクリプト タスクとスクリプト コンポーネントは、次の一般的な機能を共有します。
| 特徴 | 説明 |
|---|---|
| 2 つのデザイン時モード | タスクとコンポーネントの両方で、まずエディターでプロパティを指定し、開発環境に切り替えてコードを記述します。 |
| Microsoft Visual Studio Tools for Applications (VSTA) | タスクとコンポーネントはどちらも同じ VSTA IDE を使用し、Microsoft Visual Basic または Microsoft Visual C# で記述されたコードをサポートします。 |
| プリコンパイル済みスクリプト | SQL Server 2008 Integration Services (SSIS) 以降では、すべてのスクリプトがプリコンパイルされます。 以前のバージョンでは、スクリプトがプリコンパイルされたかどうかを指定できました。 スクリプトはバイナリ コードにプリコンパイルされ、実行速度が向上しますが、パッケージ サイズが増加します。 |
| デバッグ | タスクとコンポーネントの両方で、ブレークポイントと、デザイン環境でのデバッグ中のコードのステップ実行がサポートされます。 詳細については、「 スクリプト タスクのコーディングとデバッグ 」および「スクリプト コンポーネントのコーディングとデバッグ」を参照してください。/extending-packages-scripting/data-flow-script-component/coding-and-debugging-the-script-component.md. |
スクリプト タスクとスクリプト コンポーネントの違い
スクリプト タスクとスクリプト コンポーネントには、次のような大きな違いがあります。
| 特徴 | スクリプト タスク | スクリプト コンポーネント |
|---|---|---|
| 制御フロー/データ フロー | スクリプト タスクはデザイナーの [制御フロー] タブで構成され、パッケージのデータ フローの外部で実行されます。 | スクリプト コンポーネントはデザイナーの [データ フロー] ページで構成され、データ フロー タスクのソース、変換、または変換先を表します。 |
| 目的 | スクリプト タスクは、ほぼすべての汎用タスクを実行できます。 | スクリプト コンポーネントを使用してソース、変換、または変換先を作成するかどうかを指定する必要があります。 |
| 実行 | スクリプト タスクは、パッケージ ワークフローのある時点でカスタム コードを実行します。 ループ コンテナーまたはイベント ハンドラーに配置しない限り、1 回だけ実行されます。 | スクリプト コンポーネントも 1 回実行されますが、通常は、データ フロー内のデータ行ごとにメイン処理ルーチンを 1 回実行します。 |
| 編集者 |
スクリプト タスク エディターには、[全般]、[スクリプト]、[式] の 3 つのページがあります。
ReadOnlyVariablesプロパティと ReadWriteVariables プロパティと ScriptLanguage プロパティのみが、記述できるコードに直接影響します。 |
スクリプト変換エディターには、最大 4 つのページ (入力列、入力と出力、スクリプト、接続マネージャー) があります。 これらの各ページで構成するメタデータとプロパティによって、コーディングで使用するために自動生成される基底クラスのメンバーが決まります。 |
| パッケージとの対話 | スクリプト タスク用に記述されたコードでは、 Dts プロパティを使用してパッケージの他の機能にアクセスします。
Dts プロパティは、ScriptMain クラスのメンバーです。 |
スクリプト コンポーネント コードでは、型指定されたアクセサー プロパティを使用して、変数や接続マネージャーなどの特定のパッケージ機能にアクセスします。PreExecute メソッドでは、読み取り専用変数にのみアクセスできます。
PostExecute メソッドでは、読み取り専用変数および読み取り/書き込み変数の両方にアクセスできます。これらのメソッドの詳細については、「スクリプト コンポーネントのコーディングとデバッグ](../extending-packages-scripting/data-flow-script-component/coding-and-debugging-the-script-component.md. |
| 変数の使用 | スクリプト タスクでは、Dts オブジェクトの Variables プロパティを使用して、タスクのReadOnlyVariablesプロパティとReadWriteVariablesプロパティで使用できる変数にアクセスします。 例えば次が挙げられます。[VB] Dim myVar as String myVar = Dts.Variables("MyStringVariable").Value.ToString[C#] string myVar; myVar = Dts.Variables["MyStringVariable"].Value.ToString(); |
スクリプト コンポーネントは、自動生成されたベース クラスの型指定されたアクセサー プロパティを使用します。このプロパティは、コンポーネントの ReadOnlyVariables プロパティと ReadWriteVariables プロパティから作成されます。 例えば次が挙げられます。 [VB] Dim myVar as String myVar = Me.Variables.MyStringVariable[C#] string myVar; myVar = this.Variables.MyStringVariable; |
| 接続の使用 | スクリプト タスクでは、Dts オブジェクトの Connections プロパティを使用して、パッケージで定義されている接続マネージャーにアクセスします。 例えば次が挙げられます。[VB] Dim myFlatFileConnection As String myFlatFileConnection = _ DirectCast(Dts.Connections("Test Flat File Connection").AcquireConnection(Dts.Transaction), _ String)[C#] string myFlatFileConnection; myFlatFileConnection = (Dts.Connections["Test Flat File Connection"].AcquireConnection(Dts.Transaction) as String); |
スクリプト コンポーネントは、自動生成された基底クラスの型指定されたアクセサー プロパティを使用します。このプロパティは、エディターの [接続マネージャー] ページでユーザーが入力した接続マネージャーの一覧から作成されます。 例えば次が挙げられます。 [VB] Dim connMgr As IDTSConnectionManager100 connMgr = Me.Connections.MyADONETConnection[C#] IDTSConnectionManager100 connMgr; connMgr = this.Connections.MyADONETConnection; |
| イベントの発生 | スクリプト タスクでは、Dts オブジェクトの Events プロパティを使用してイベントを発生させます。 例えば次が挙げられます。[VB] Dts.Events.FireError(0, "Event Snippet", _ ex.Message & ControlChars.CrLf & ex.StackTrace, _ "", 0)[C#] Dts.Events.FireError(0, "Event Snippet", ex.Message + "\r" + ex.StackTrace, "", 0); |
スクリプト コンポーネントは、ComponentMetaData プロパティによって返されるIDTSComponentMetaData100 インターフェイスのメソッドを使用して、エラー、警告、および情報メッセージを発生させます。 例えば次が挙げられます。 [VB] Dim myMetadata as IDTSComponentMetaData100 myMetaData = Me.ComponentMetaData myMetaData.FireError(...) |
| ロギング(記録) | スクリプト タスクでは、Dts オブジェクトの Log メソッドを使用して、有効なログ プロバイダーに情報を記録します。 例えば次が挙げられます。[VB] Dim bt(0) As Byte Dts.Log("Test Log Event", _ 0, _ bt)[C#] byte[] bt = new byte[0]; Dts.Log("Test Log Event", 0, bt); |
スクリプト コンポーネントは、自動生成された基底クラスの Log メソッドを使用して、有効なログ プロバイダーに情報をログに記録します。 例えば次が挙げられます。 [VB] Dim bt(0) As ByteMe.Log("Test Log Event", _0, _bt)[C#] byte[] bt = new byte[0]; this.Log("Test Log Event", 0, bt); |
| 結果の返送 | スクリプト タスクでは、Dts オブジェクトの TaskResult プロパティと省略可能な ExecutionValue プロパティの両方を使用して、結果をランタイムに通知します。 |
スクリプト コンポーネントは、データ フロー タスクの一部として実行され、これらのプロパティを使用して結果を報告しません。 |
こちらもご覧ください
スクリプト タスクによるパッケージの拡張
スクリプト コンポーネントによるデータ フローの拡張
SQL Server Integration Services SSIS でスクリプト タスクを使用して Web サービスに接続する