式における Integration Services データ型
式エバリュエーターは、Integration Services データ型を使用します。データが Integration Services パッケージのデータ フローに入力されると、データ フロー エンジンはすべての列データを Integration Services のデータ型に変換します。このため、式が列データを使用するときには、既に Integration Services のデータ型になっています。条件分割変換および派生列変換で使用される式は、列データが含まれるデータ フローの一部であるため、列を参照できます。
また、式は変数を使用することもできます。変数は variant データ型で、式エバリュエーターは、変数のデータ型を variant サブタイプから Integration Services のデータ型に変換してから式を評価します。変数では、Integration Services のデータ型のサブセットのみが使用できます。たとえば、変数はバイナリ ラージ オブジェクト (BLOB) データ型を使用することはできません。
Integration Services のデータ型の詳細と、variant データ型から Integration Services のデータ型へのマッピングの詳細については、「Integration Services のデータ型」を参照してください。
式には、文字列、ブール、および数値リテラルも含めることができます。式エバリュエーターは、文字列リテラルを DT_WSTR データ型に、ブール型リテラルを DT_BOOL データ型に、常に変換します。式エバリュエーターは、引用符で囲まれたすべての値を文字列として解釈します。数値リテラルは、Integration Services の数値データ型のいずれかに変換されます。数値リテラルの Integration Services 数値データ型への変換の詳細については、「リテラル (SSIS)」を参照してください。
注 |
---|
ブール値は論理値であって、数値ではありません。ブール値は一部の環境で数値として表示される場合がありますが、数値として格納されることはありません。また、.NET Framework のメソッドと同様に、さまざまなプログラミング言語でブール値が個別の数値として表されます。 たとえば、Visual Basic で使用できる変換関数は True を -1 に変換しますが、.NET Framework の System.Convert.ToInt32 メソッドは True を +1 に変換します。Integration Services 式言語は True を -1 に変換します。 エラーや予期しない結果が発生しないようにするには、True と False を特定の数値で表現するコードを記述しないようにする必要があります。可能な限り、ブール型の変数には、仕様で定められている論理値以外の値を使用しないようにしてください。 |
式で使用されるデータの要件
式エバリュエーターは、Integration Services のすべてのデータ型をサポートします。ただし、演算または関数によっては、オペランドや引数で特定のデータ型が必要になります。式エバリュエーターは、式で使用されるデータに対し、次のデータ型を要求します。
論理演算で使用するオペランドは、ブール型に評価される必要があります。たとえば、ColumnA > 1&&ColumnB < 2 などの場合です。
数学的演算で使用するオペランドは、数値に評価される必要があります。たとえば、23.75 * 4 などの場合です。
論理演算や等価演算などの比較演算で使用するオペランドは、互換性のあるデータ型に評価される必要があります。
たとえば、次の例に示す式の 1 つでは DT_DBTIMESTAMPOFFSET データ型が使用されています。
(DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30" != (DT_DBDATE)"1999-10-12"
式 (DT_DBDATE)"1999-10-12" は DT_DBTIMESTAMPOFFSET に変換されます。変換された式は "1999-10-12 00:00:00.000 +00:00" となり、他の式の値 (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30" と一致しないため、TRUE に評価されます。
数学関数に渡される引数は、数値データ型に評価される必要があります。関数または演算によっては、特定の数値データ型が必要となる場合があります。たとえば HEX 関数では、符号付き整数または符号なし整数が必要です。
文字列関数に渡される引数は、DT_STR または DT_WSTR の文字データ型に評価される必要があります。たとえば、UPPER("flower") などの場合です。SUBSTRING などの一部の文字列関数では、さらに、文字列の開始位置や長さを指定するために整数の引数が必要となります。
日付と時刻の関数に渡される引数は、有効な日付に評価される必要があります。たとえば、DAY(GETDATE()) などの場合です。DATEADD などの一部の関数では、さらに、関数が日付に追加する日数を指定するために整数の引数が必要となります。
符号なし 8 バイト整数と符号付き整数を結合する演算では、結果の形式を明確にするために明示的なキャストが必要です。詳細については、「キャスト (SSIS 式): SSIS データ型の変換」を参照してください。
演算や関数の結果のデータ型は、多くの場合、定義済みのものです。つまり、引数のデータ型、または式エバリュエーターが結果をキャストするデータ型として定義されています。たとえば、論理 OR 演算子 (||) の結果は常にブール型で、ABS 関数の結果は引数と同じ数値データ型になります。また、乗算の結果は、結果を失うことなく保持可能な最小の数値データ型になります。結果のデータ型の詳細については、「演算子 (SSIS 式)」および「文字列関数とその他の関数 (SSIS 式)」を参照してください。