次の方法で共有


スクリプト コンポーネント エディタでのスクリプト コンポーネントの構成

更新 : 2007 年 9 月 15 日

スクリプト コンポーネント内でカスタム コードを記述する前に、作成するデータ フロー コンポーネントの種類 (変換元、変換、または変換先) を選択し、[スクリプト変換エディタ] でスクリプト コンポーネントのメタデータおよびプロパティを構成する必要があります。

作成するコンポーネントの種類の選択

SSIS デザイナの [データ フロー] ペインにスクリプト コンポーネントを追加すると、[スクリプト コンポーネントの種類を選択] ダイアログ ボックスが表示され、変換元、変換、または変換先としてあらかじめ構成するコンポーネントの入力を求めるメッセージが表示されます。最初にこれを選択したら、引き続き [スクリプト変換エディタ] でスクリプト コンポーネントを構成できます。

デザイン時の 2 つのモードについて

SSIS デザイナでは、スクリプト コンポーネントにメタデータ デザイン モードとコード デザイン モードの 2 つのモードがあります。

[スクリプト変換エディタ] を開くと、スクリプト コンポーネントはメタデータ デザイン モードになります。このモードでは、入力列の選択、および出力と出力列の追加または構成を行うことができますが、コードは記述できません。このコンポーネントのメタデータを構成した後で、コード デザイン モードに切り替えてスクリプトを記述できます。

[スクリプトのデザイン] をクリックしてコード デザイン モードに切り替えると、スクリプト コンポーネントではメタデータがロックされ、追加の変更ができなくなり、入力と出力のメタデータから基本コードが自動的に生成されます。コードの自動生成が完了すると、カスタム コードを入力できるようになります。作成したコードは自動生成された基本クラスを使用し、すべて厳密に型指定されたオブジェクトとして、入力行の処理、バッファおよびバッファ内の列へのアクセス、およびパッケージからの接続マネージャと変数の取得を行います。

コード デザイン モードでカスタム コードを入力したら、モードを切り替えてメタデータ デザイン モードに戻すことができます。これによって入力したコードが削除されることはありませんが、次にメタデータを変更すると、基本クラスが再生成されます。その後、カスタム コードが参照するオブジェクトが存在しないか、または変更されたために、コンポーネントの検証に失敗する可能性があります。その場合、再生成された基本クラスに対してコードが正常にコンパイルされるように、コードを手動で修正する必要があります。

メタデータ デザイン モードでのコンポーネントの構成

メタデータ デザイン モードでは、入力列の選択、および出力と出力列の追加や構成を行うことができますが、コードは記述できません。コンポーネントのメタデータを構成した後で、コード デザイン モードに切り替えてスクリプトを記述します。

カスタム エディタで構成する必要のあるプロパティは、スクリプト コンポーネントの使用法に応じて異なります。スクリプト コンポーネントは、変換元、変換、または変換先として構成できます。コンポーネントの使用方法に応じて、入力または出力のどちらか、またはその両方がサポートされます。記述するカスタム コードでは、入力および出力の行と列が処理されます。

[スクリプト変換エディタ] の [入力列] ページ

変換および変換先では、[スクリプト変換エディタ][入力列] ページが表示されます。変換元では表示されません。このページでは、使用できる入力列から、使用するカスタム スクリプトを選択し、その入力列に読み取り専用でアクセスするか、または読み取り/書き込みでアクセスするかを指定します。

このメタデータに基づいて生成されるコード プロジェクトでは、BufferWrapper プロジェクト アイテムに、各入力のクラスが含まれます。このクラスには、選択した各入力列用の型指定されたアクセサ プロパティが含まれています。たとえば、CustomerInput という名前の入力から整数型の CustomerID 列と文字列型の CustomerName 列を選択した場合、BufferWrapper プロジェクト アイテムには ScriptBuffer から派生した CustomerInput クラスが格納されます。CustomerInput クラスからは、CustomerID という名前の整数型プロパティと、CustomerName という名前の文字列型プロパティが公開されます。この規則により、次のような型チェック付きのコードが記述できます。

Dim currentCustomerID as Integer = CustomerInput.CustomerID

Dim currentCustomerName as String = CustomerInput.CustomerName

特定の種類のデータ フロー コンポーネントの入力列を構成する方法の詳細については、「その他のスクリプト コンポーネントの例」で、該当する例を参照してください。

[スクリプト変換エディタ] の [入力および出力] ページ

変換元、変換、および変換先では、[スクリプト変換エディタ][入力および出力] ページが表示されます。このページでは、カスタム スクリプトで使用する入力、出力、および出力列を追加、削除、および構成します。ただし、次のような制限があります。

  • スクリプト コンポーネントを変換元として使用する場合、入力はありませんが複数の出力がサポートされます。
  • スクリプト コンポーネントを変換として使用する場合、1 つの入力と複数の出力がサポートされます。
  • スクリプト コンポーネントを変換先として使用する場合、1 つの入力がサポートされますが出力はありません。

このメタデータに基づいて生成されるコード プロジェクトでは、BufferWrapper プロジェクト アイテムに、各入力および出力のクラスが含まれます。たとえば、CustomerOutput という名前の出力を作成した場合、BufferWrapper プロジェクト アイテムには、ScriptBuffer から派生した CustomerOutput クラスが含まれます。CustomerOutput クラスには、作成された各出力列用の型指定されたアクセサ プロパティが含まれます。

出力列は、[入力および出力] ページでのみ構成できます。変換および変換先の入力列は、[入力列] ページで選択できます。BufferWrapper プロジェクト アイテムで作成された、型指定されたアクセサ プロパティは、出力列の書き込み専用プロパティです。入力列のアクセサ プロパティは、[入力列] ページで各列に選択した使用法の種類に応じて、読み取り専用または読み取り/書き込みのプロパティになります。

特定の種類のデータ フロー コンポーネントの入力および出力を構成する方法の詳細については、「その他のスクリプト コンポーネントの例」で、該当する例を参照してください。

ms135927.note(ja-jp,SQL.90).gifメモ :
エラー行の自動処理のスクリプト コンポーネントでエラー出力として出力を直接構成することはできませんが、別の出力を作成するか、可能な場合はスクリプトを使用してこの出力に行を送信することによって、エラー出力の機能を再現することができます。詳細については、「スクリプト コンポーネントに対するエラー出力のシミュレート」を参照してください。

出力の ExclusionGroup プロパティおよび SynchronousInputID プロパティ

ExclusionGroup プロパティは、同期出力型の変換でのみ、0 以外の値になります。この場合、コードはフィルタまたは分岐を実行し、各行を、ExclusionGroup の 0 以外の同じ値を共有する出力の 1 つに送ります。たとえば変換は、行を既定の出力またはエラー出力のどちらかに送信できます。この場合に追加の出力を作成するには、SynchronousInputID プロパティの値が、コンポーネントの入力の ID と一致する整数に設定されていることを確認します。

SynchronousInputID プロパティは、同期出力型の変換でのみ、0 以外の値になります。このプロパティの値が 0 の場合、出力が非同期型であることを示します。同期出力では、新しい行を追加せず、選択した出力に行が渡されます。このプロパティには、コンポーネントの入力の ID が含まれている必要があります。

ms135927.note(ja-jp,SQL.90).gifメモ :
[スクリプト変換エディタ] が最初の出力を作成するとき、出力の SynchronousInputID プロパティは、コンポーネントの入力の ID に設定されます。しかし、エディタが以降の出力を作成するとき、これらの出力の SynchronousInputID プロパティはゼロに設定されます。 同期出力型のコンポーネントを作成している場合、各出力の SynchronousInputID プロパティは、コンポーネントの入力の ID に設定されている必要があります。したがって、エディタが最初の出力の後に作成する各出力の SynchronousInputID 値は、ゼロから、コンポーネントの入力の ID に変更されている必要があります。 非同期出力型のコンポーネントを作成している場合、各出力の SynchronousInputID プロパティは、ゼロに設定されている必要があります。したがって、最初の出力の SynchronousInputID 値は、コンポーネントの入力の ID から、ゼロに変更されている必要があります。

スクリプト コンポーネントで 2 つの同期出力のうちのいずれかに行を送信する例については、「スクリプト コンポーネントによる同期変換の作成」を参照してください。

生成されたスクリプトのオブジェクト名

スクリプト コンポーネントは、入力と出力の名前を解析し、入力と出力内の列の名前を解析します。次に、これらの名前に基づいて、BufferWrapper プロジェクト アイテムにクラスとプロパティを生成します。見つかった名前に、Unicode カテゴリの UppercaseLetterLowercaseLetterTitlecaseLetterModifierLetterOtherLetter、または DecimalDigitLetter に属していない文字が含まれている場合、無効な文字は生成された名前から削除されます。たとえば、スペースは削除されるため、FirstName と [First Name] という名前の 2 つの入力列は、どちらも列名 FirstName を持つと解釈され、予期しない結果が生じます。このような状況を防ぐには、スクリプト コンポーネントで使用される入力と出力の名前、および入力と出力の列の名前には、このセクションで一覧表示されている Unicode カテゴリに属する文字のみが含まれるようにする必要があります。

[スクリプト変換エディタ] の [スクリプト] ページ

[スクリプト変換エディタ][スクリプト] ページでは、スクリプト タスクに一意の名前および説明を割り当てます。また、次のプロパティの値を割り当てることができます。

ValidateExternalMetadata プロパティ

ValidateExternalMetadata プロパティのブール値は、コンポーネントがデザイン時に外部データ ソースに対する検証を実行するかどうか、または実行時まで検証を延期するかどうかを指定します。既定では、このプロパティの値は True です。つまり、外部メタデータはデザイン時と実行時の両方で検証されます。外部データ ソースをデザイン時に使用しない場合、たとえば、パッケージの実行時にのみ外部データ ソースをダウンロードしたり、変換先を作成する場合には、このプロパティの値を False に設定できます。

PreCompile プロパティ

スクリプト コンポーネント内で記述したコードを、実行時にその場でコンパイルするのではなく、事前コンパイルするように指定できます。既定では、このブール値のプロパティの値は True です。コードを事前コンパイルすると、スクリプト コンポーネントのパフォーマンスは向上しますが、バイナリ コードが埋め込まれることにより、保存されたパッケージのサイズも大幅に増加します。

スクリプトを 64 ビットのコンピュータで使用するには、事前コンパイルする必要があります。詳細については、「64 ビット コンピュータ上での Integration Services の使用上の注意」を参照してください。

ms135927.note(ja-jp,SQL.90).gifメモ :
Precompile プロパティの値を False から True に変更したら、スクリプトを少なくとも 1 回は VSA IDE で再度開き、Visual Studio ツールでコードをコンパイルできるようにする必要があります。

ReadOnlyVariables プロパティおよび ReadWriteVariables プロパティ

既存の変数をスペースなしのコンマ区切りリストとして、これらのプロパティの値に入力すると、スクリプト コンポーネントのコード内で、その変数に読み取り専用アクセスまたは読み取り/書き込みアクセスできるようになります。変数には、自動生成された基本クラスの ReadOnlyVariables および ReadWriteVariables プロパティを介して、コード内でアクセスします。詳細については、「スクリプト コンポーネントでの変数の使用」を参照してください。

ms135927.note(ja-jp,SQL.90).gifメモ :
変数名の大文字と小文字は区別されます。

[スクリプトのデザイン] ボタン

[スクリプトのデザイン] ボタンをクリックすると VSA 開発環境が開き、カスタム スクリプトを記述できます。詳細については、「スクリプト コンポーネントのコーディングおよびデバッグ」を参照してください。

[スクリプト変換エディタ] の [接続マネージャ] ページ

[スクリプト変換エディタ][接続マネージャ] ページでは、カスタム スクリプトで使用する接続マネージャを追加および削除します。通常、変換元または変換先コンポーネントを作成する場合は、接続マネージャを参照する必要があります。

このメタデータに基づいて生成されるコード プロジェクトの ComponentWrapper プロジェクト アイテムには、選択した各接続マネージャ用の型指定されたアクセサ プロパティを格納する Connections コレクション クラスが含まれます。型指定された各アクセサ プロパティの名前は、接続マネージャ自体の名前と同じであり、IDTSConnectionManager90 のインスタンスとして、接続マネージャへの参照を返します。たとえば、エディタの [接続マネージャ] ページに MyADONETConnection という名前の接続マネージャを追加した場合、次のコードを使用して、スクリプト内のその接続マネージャへの参照を取得できます。

Dim myADONETConnectionManager As IDTSConnectionManager90 = _

Me.Connections.MyADONETConnection

詳細については、「スクリプト コンポーネントでのデータ ソースへの接続」を参照してください。

参照

概念

スクリプト コンポーネントのコーディングおよびデバッグ

その他の技術情報

64 ビット コンピュータ上での Integration Services の使用上の注意

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2007 年 9 月 15 日

変更内容 :
  • [スクリプト変換エディタ] が複数の出力に対して SynchronousInputID プロパティを設定する方法に関する注記を追加しました。