Share via


式における Integration Services データ型

適用対象:SQL Server Azure Data Factory の SSIS Integration Runtime

式エバリュエーターは、Integration Services データ型を使用します。 データが Integration Services パッケージのデータ フローに入力されると、データ フロー エンジンはすべての列データを Integration Services のデータ型に変換します。このため、式が列データを使用するときには、既に Integration Services のデータ型になっています。 条件分割変換および派生列変換で使用される式は、列データが含まれるデータ フローの一部であるため、列を参照できます。

変数

また、式は変数を使用することもできます。 変数は variant データ型で、式エバリュエーターは、変数のデータ型を variant サブタイプから Integration Services のデータ型に変換してから式を評価します。 変数では、Integration Services のデータ型のサブセットのみが使用できます。 たとえば、変数はバイナリ ラージ オブジェクト (BLOB) データ型を使用することはできません。

Integration Services のデータ型と Integration Services のデータ型に対する variant データ型のマッピングについては、「Integration Services のデータ型」を参照してください。

リテラル

式には、文字列、ブール、および数値リテラルも含めることができます。 数値リテラルの Integration Services 数値データ型への変換の詳細については、「リテラル (SSIS)」を参照してください。

文字列

DT_STR または DT_WSTR のいずれかを、式の戻り値の型として使用できます。 ただし、式の内部でサポートされるのは DT_WSTR のみです。DT_STR 値は DT_WSTR 値に変換されます。 式を作成するときは、これを考慮する必要があります。

  • 式の内部では、NULL(DT_STR, ...) ではなく NULL(DT_WSTR, ...) を使用します。この関数の詳細については、「NULL (SSIS 式)」を参照してください。

  • 式の内部では、式のルートでのみ、つまり最終的な式の結果を返すときにのみ、CAST 関数を使用して、値を DT_STR 型にキャストできます。 それ以外の場合は、式で DT_WSTR 型を使用します。

次のスクリーン ショットの式について考えてみましょう。

String data types in SSIS expressions

  1. 最初の式は、NULL(DT_STR, ...) 関数が式のルート レベルにあるため、エラーなしで実行されます。

  2. 2 番目の式は、NULL(DT_WSTR, ...) が使用されているため、エラーなしで実行されます。

  3. 3 番目の式は、式の内部で NULL(DT_STR, ...) が使用されているため、エラーが発生します。

  4. 4 番目の式は、式の内部で NULL(DT_STR, ...) の結果をキャストしているため、エラーなしで実行されます。

    この式エバリュエーターは、計算が式のルート レベルで行われていないことを認識し、このキャストをインテリジェントに処理して、DT_STR ではなく DT_WSTR にキャストします。

以下の例は、キャストの影響を示しています。

Casting strings in SSIS expressions

  1. 最初の式は、キャストが式のルート レベルにありません。 式エバリュエーターは、このキャストをインテリジェントに処理し、DT_STR ではなく、DT_WSTR にキャストします。 式は DT_WSTR を返します。

  2. 2 番目の式は、キャストが式のルート レベルにあります。 式は DT_STR を返します。

暗黙的なデータ変換

データ型の暗黙的な変換は、式エバリュエーターがあるデータ型を別のデータ型に自動的に変換するときに行われます。 たとえば、 smallint 型を int型と比較する場合、比較を実行する前に、 smallint 型から int 型に暗黙的に変換されます。

引数やオペランドに互換性のないデータ型がある場合は、式エバリュエーターは暗黙的なデータ変換を実行できません。 また、式エバリュエーターは、どのような値もブール値に暗黙的に変換することはできません。 代わりに、キャスト演算子を使用して引数とオペランドを明示的に変換する必要があります。 詳細については、「Cast (SSIS 式)」をご覧ください。

次の図は、BINARY 演算での暗黙的な変換の結果のデータ型を示しています。 この表の列と行の交差部分は、左 (変換元) と右 (変換先) の型のオペランドによるバイナリ演算の結果のデータ型です。

Implicit data type conversion between data types

符号付き整数と符号なし整数の積集合は符号付き整数になり、この値はどちらかの引数よりも大きい場合があります。

演算子は、文字列、日付、ブール値、およびその他のデータ型を比較します。 演算子が 2 つの値を比較する前に、式エバリュエーターは特定の暗黙的な変換を実行します。 式エバリュエーターは、文字列リテラルを DT_WSTR データ型に、ブール型リテラルを DT_BOOL データ型に、常に変換します。 式エバリュエーターは、引用符で囲まれたすべての値を文字列として解釈します。 数値リテラルは、Integration Services の数値データ型のいずれかに変換されます。

Note

ブール値は論理値であり、数値ではありません。 ブール値は一部の環境で数値として表示される場合がありますが、数値として格納されることはありません。また、.NET Framework のメソッドと同様に、さまざまなプログラミング言語でブール値が個別の数値として表されます。

たとえば、Visual Basic で利用できる変換関数では True は -1 に変換されますが、.NET Framework の System.Convert.ToInt32 メソッドでは True は +1 に変換されます。 Integration Services の式言語では、True は -1 に変換されます。

エラーや予期しない結果が発生しないように、 True および Falseについては、特定の数値を参照するようなコードは記述しないでください。 可能な限り、ブール型の変数には、仕様で定められている論理値以外の値を使用しないようにしてください。

詳細については、次のトピックを参照してください。

関数の引数が 1 つの場合、その関数は引数と同じデータ型の結果を返します。ただし、次の場合は除きます。

  • DAY、MONTH、および YEAR は、日付型から整数 (DT_I4) 型の結果を返します。

  • ISNULL は、任意の SSIS データ型の式からブール (DT_BOOL) 型の結果を返します。

  • SQUARE および SQRT は、数値式から非整数の数値 (DT_R8) 型の結果を返します。

複数の引数が同じデータ型の場合、結果も同じデータ型になります。 ただし、DT_DECIMAL データ型の 2 つの値におけるバイナリ演算の結果だけは例外で、DT_NUMERIC データ型の結果を返します。

式で使用されるデータの要件

式エバリュエーターは、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 バイト整数と符号付き整数を結合する演算では、結果の形式を明確にするために明示的なキャストが必要です。 詳細については、「Cast (SSIS 式)」をご覧ください。

演算や関数の結果のデータ型は、多くの場合、定義済みのものです。 つまり、引数のデータ型、または式エバリュエーターが結果をキャストするデータ型として定義されています。 たとえば、論理 OR 演算子 (||) の結果は常にブール型で、ABS 関数の結果は引数と同じ数値データ型になります。また、乗算の結果は、結果を失うことなく保持可能な最小の数値データ型になります。 結果のデータ型については、「演算子 (SSIS 式)」と「関数 (SSIS 式)」を参照してください。

データ フロー コンポーネントで式を使用する