次の方法で共有


スクリプト タスクとスクリプト コンポーネントの比較

適用対象: SQL Server Azure Data Factory の SSIS 統合ランタイム

スクリプト タスクは Integration Services デザイナーの [制御フロー] ウィンドウで使用でき、スクリプト コンポーネントは [データ フロー] ウィンドウで使用できます。これら 2 つのタスクは、Integration Services パッケージ内での目的がまったく異なります。 タスクは汎用の制御フロー ツールであるのに対し、コンポーネントはデータ フロー内で変換元、変換、または変換先としての役割を果たします。 ただし、目的は異なっても、コード作成に使用するツールや、開発者が使用できるパッケージ内のオブジェクトについては、スクリプト タスクとスクリプト コンポーネントには似通った点があります。 共通点と相違点を理解すると、このタスクとコンポーネントをより効率的に使用するために役立ちます。

スクリプト タスクとスクリプト コンポーネントの共通点

スクリプト タスクとスクリプト コンポーネントには、次のような共通の機能があります。

特徴量 説明
デザイン時の 2 つのモード タスクとコンポーネントのどちらの場合も、最初にエディターでプロパティを指定し、次に開発環境に切り替えてコードを記述します。
Microsoft Visual Studio Tools for Applications (VSTA) タスクもコンポーネントも、同じ VSTA IDE を使用し、Microsoft Visual Basic または Microsoft Visual C# で記述されたコードをサポートします。
スクリプトのプリコンパイル SQL Server 2008 Integration Services (SSIS) 以降では、すべてのスクリプトがプリコンパイルされます。 以前のバージョンでは、スクリプトをプリコンパイルするかどうかを指定できました。

スクリプトがバイナリ コードに事前コンパイルされるため、実行速度が向上しますが、パッケージ サイズは増加します。
デバッグ タスクおよびコンポーネントの両方で、設計環境におけるコードのデバッグ時に、ブレークポイントを使用したステップ実行がサポートされます。 詳細については、「スクリプト タスクのコーディングおよびデバッグ」および「スクリプト コンポーネントのコーディングおよびデバッグ」を参照してください。

スクリプト タスクとスクリプト コンポーネントの相違点

スクリプト タスクとスクリプト コンポーネントには、次のような顕著な相違点があります。

特徴量 スクリプト タスク スクリプト コンポーネント
制御フローとデータ フロー スクリプト タスクはデザイナーの [制御フロー] タブで設定され、パッケージのデータ フローの外で実行されます。 スクリプト コンポーネントはデザイナーの [データ フロー] ページで設定され、データ フロー タスク内で変換元、変換、または変換先のいずれかを表します。
目的 スクリプト タスクはほとんどの汎用タスクを実行できます。 スクリプト コンポーネントでは、変換元、変換、または変換先のどれを作成するかを指定する必要があります。
実行 スクリプト タスクは、パッケージ ワークフロー内のある時点でカスタム コードを実行します。 ループ コンテナーまたはイベント ハンドラー内に配置しない限り、実行されるのは 1 回のみです。 スクリプト コンポーネントも実行されるのは 1 回のみですが、通常、メイン処理ルーチンはデータ フロー内のデータ行ごとに 1 回ずつ実行されます。
エディター [スクリプト タスク エディター] には、[全般][スクリプト][式] の 3 つのページがあります。 ReadOnlyVariables プロパティ、ReadWriteVariables プロパティ、および ScriptLanguage プロパティのみがユーザーが記述できるコードに直接影響を与えます。 [スクリプト変換エディター] には、[入力列][入力および出力][スクリプト][接続マネージャー] の、最大 4 つのページがあります。 この各ページで設定するメタデータやプロパティにより、コードを記述する際に使用できる、自動生成された基本クラスのメンバーが指定されます。
パッケージの操作 パッケージの他の機能にアクセスするには、スクリプト タスク用に記述するコードで Dts プロパティを使用します。 Dts プロパティは、ScriptMain クラスのメンバーです。 スクリプト コンポーネントのコードでは、型指定されたアクセサー プロパティを使用して、変数や接続マネージャーなど、特定のパッケージ機能にアクセスします。

PreExecute メソッドでは、読み取り専用変数にのみアクセスできます。 PostExecute メソッドでは、読み取り専用変数および読み取り/書き込み変数の両方にアクセスできます。

これらのメソッドの詳細については、「スクリプト コンポーネントのコーディングおよびデバッグ」を参照してください。
変数の使用 スクリプト タスクでは、Dts オブジェクトの Variables プロパティを使用して、タスクの ReadOnlyVariables プロパティおよび ReadWriteVariables プロパティで使用できる変数にアクセスします。 次に例を示します。

[Visual Basic]

Dim myVar as String
myVar = Dts.Variables("MyStringVariable").Value.ToString

[C#]

string myVar;
myVar = Dts.Variables["MyStringVariable"].Value.ToString();
スクリプト コンポーネントでは、自動生成された基本クラスの型指定されたアクセサー プロパティを使用します。このプロパティは、コンポーネントの ReadOnlyVariables プロパティおよび ReadWriteVariables プロパティから作成されます。 次に例を示します。

[Visual Basic]

Dim myVar as String
myVar = Me.Variables.MyStringVariable

[C#]

string myVar;
myVar = this.Variables.MyStringVariable;
接続の使用 スクリプト タスクでは、Dts オブジェクトの Connections プロパティを使用して、パッケージで定義された接続マネージャーにアクセスします。 次に例を示します。

[Visual Basic]

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);
スクリプト コンポーネントでは、自動生成された基本クラスの型指定されたアクセサー プロパティを使用します。このプロパティは、エディターの [接続マネージャー] ページでユーザーが入力した、接続マネージャーの一覧から作成されます。 次に例を示します。

[Visual Basic]

Dim connMgr As IDTSConnectionManager100
connMgr = Me.Connections.MyADONETConnection

[C#]

IDTSConnectionManager100 connMgr;
connMgr = this.Connections.MyADONETConnection;
イベントの発生 スクリプト タスクでは、Dts オブジェクトの Events プロパティを使用してイベントを発生させます。 次に例を示します。

[Visual Basic]

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);
スクリプト コンポーネントでエラー、警告、情報メッセージを発生させるには、IDTSComponentMetaData100 プロパティから返される ComponentMetaData インターフェイスのメソッドを使用します。 次に例を示します。

[Visual Basic]

Dim myMetadata as IDTSComponentMetaData100 myMetaData = Me.ComponentMetaData myMetaData.FireError(...)
ログの記録 スクリプト タスクでは、Dts オブジェクトの Log メソッドを使用して、有効なログ プロバイダーに情報を記録します。 次に例を示します。

[Visual Basic]

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 メソッドを使用して、有効なログ プロバイダーに情報を記録します。 次に例を示します。

[Visual Basic]

Dim bt(0) As Byte

Me.Log("Test Log Event", _

0, _

bt)

[C#]

byte[] bt = new byte[0]; this.Log("Test Log Event", 0, bt);
結果の返送 スクリプト タスクでは、Dts オブジェクトの TaskResult プロパティ、および場合によって ExecutionValue プロパティを使用して、ランタイムに結果を通知します。 スクリプト コンポーネントはデータ フロー タスクの一部として実行され、プロパティを使用して結果をレポートすることはありません。

参照

スクリプト タスクによるパッケージの拡張
スクリプト コンポーネントによるデータ フローの拡張