Типы данных служб Integration Services в выражениях

Применяется к:sql Server SSIS Integration Runtime в Фабрика данных Azure

Оценщик выражений использует типы данных Integration Services. Когда данные впервые попадают в поток данных пакета Integration Services, подсистема обработки потока данных преобразует все данные столбцов в тип данных Integration Services, а данные столбцов, используемых выражением, уже имеют тип данных Integration Services. Выражения, используемые в преобразованиях «Условное разбиение» и «Производный столбец», могут ссылаться на столбцы, поскольку являются частью потока данных, включающего данные столбцов.

Переменные

Выражения также могут использовать переменные. Переменные имеют тип данных Variant, и оценщик выражений преобразует тип данных переменной из подтипа Variant в тип данных Integration Services перед вычислением выражения. Переменные могут использовать только подмножество типов данных Integration Services. Например, переменная не может использовать тип данных BLOB.

Дополнительные сведения от типах данных Integration Services и о сопоставлении типов данных Variant с типами данных Integration Services см. в разделе Типы данных Integration Services.

Литералы

Дополнительно, выражения могут включать строковые, логические и числовые литералы. Дополнительные сведения о преобразовании числовых литералов в числовые типы данных Integration Services см. в разделе Литералы (Integration Services).

Строки

В качестве возвращаемого типа выражения можно использовать DT_STR или DT_WSTR. Однако внутри выражения поддерживается только тип DT_WSTR, а значения DT_STR преобразуются в значения DT_WSTR. Такое поведение влечет за собой несколько последствий при написании выражения.

  • Внутри выражения используйте NULL(DT_WSTR, …) вместо NULL(DT_STR, …). Дополнительные сведения об этой функции см. в разделе NULL (выражение Integration Services).

  • Внутри выражения можно использовать только функцию CAST для приведения значения к типу DT_STR в корне выражения, то есть при возвращении результата выражения. В противном случае используйте в выражении тип DT_WSTR.

Рассмотрим выражения на снимке экрана ниже.

String data types in SSIS expressions

  1. Первое выражение выполняется без ошибок, так как функция NULL(DT_STR, …) находится на корневом уровне выражения.

  2. Второе выражение выполняется без ошибок, так как в нем используется NULL(DT_WSTR, …).

  3. Третье выражение выдает ошибку, так как в нем используется NULL(DT_STR, …).

  4. Четвертое выражение выполняется без ошибок, так как в нем приводится результат NULL(DT_STR, …).

    Вычислитель выражений интеллектуально обрабатывает это приведение и выполняет его к типу DT_WSTR, а не к DT_STR, так как он распознает, что операция находится не на корневом уровне выражения.

В следующих примерах демонстрируется влияние приведения.

Casting strings in SSIS expressions

  1. В первом выражении приведение находится не на корневом уровне выражения. Вычислитель выражений интеллектуально обрабатывает это приведение и выполняет его применительно к типу DT_WSTR, а не DT_STR. Выражение возвращает DT_WSTR.

  2. Во втором выражении приведение находится на корневом уровне выражения. Выражение возвращает DT_STR.

Неявные преобразования данных

Неявное преобразование типа данных происходит, когда средство оценки выражений автоматически преобразует данные из одного типа в другой. Например, если smallint сравнивается с int, то перед сравнением smallint неявно преобразуется в int .

Средство оценки выражений не может произвести неявное преобразование данных, если аргументы и операнды имеют несовместимые типы данных. Кроме того, средство оценки выражений не может неявно преобразовывать любое значение в логическое. Вместо этого аргументы и операнды должны быть явно преобразованы с помощью оператора приведения. Дополнительные сведения см. в разделе Приведение (выражение Integration Services).

На следующей диаграмме показан тип результата неявного преобразования операций BINARY. Пересечение столбцов и строк в этой таблице является типом результата побитовой операции с операндами левого (From) и правого (To) типов.

Implicit data type conversion between data types

Пересечением целых чисел со знаком и без знака является целое число со знаком, которое потенциально больше любого из этих двух аргументов.

Операторы позволяют сравнивать строки, даты, логические значения и другие типы данных. Прежде чем оператор сравнит два значения, средство оценки выражений производит определенные неявные преобразования. Средство оценки выражений всегда преобразует строковые литералы в тип данных DT_WSTR, а логические литералы в тип данных DT_BOOL. Средство оценки выражений считает все значения, заключенные в кавычки, строками. Числовые литералы преобразуются в один из числовых типов данных Integration Services.

Примечание.

Значения логического типа не являются числовыми. Хотя логические значения в некоторых средах могут отображаться как числа, они хранятся не в виде чисел, при этом разные языки программирования представляют их в виде числовых значений по-разному, как и методы среды .NET Framework.

Например, функции преобразования языка Visual Basic преобразуют значение True в -1, в то время как метод System.Convert.ToInt32 в среде .NET Framework преобразует значение True в +1. Язык выражений Integration Services преобразует значение True в -1.

Чтобы избежать ошибок или непредвиденных результатов, следует писать программный код, который предусматривает конкретные числовые значения для True и False. Там, где возможно, необходимо ограничить использование переменных логического типа соответствующими логическими значениями.

Дополнительные сведения см. в следующих разделах:

Функция, которая использует один аргумент, возвращает результат того же типа данных, что и аргумент, со следующими исключениями.

  • Функции DAY, MONTH и YEAR принимают дату и возвращают целочисленный результат (DT_I4).

  • Функция ISNULL принимает выражения любого типа данных Integration Services и возвращает результат логического типа данных (DT_BOOL).

  • Функции SQUARE и SQRT принимают числовые выражения и возвращают нецелочисленный результат (DT_R8).

Если тип данных обоих аргументов совпадает, тип данных результата будет таким же. Единственное исключение заключается в том, что двоичная операция над двумя значениями типа данных DT_DECIMAL возвращает результат типа данных DT_NUMERIC.

Требования к данным, которые используются в выражениях

Оценщик выражений поддерживает все типы данных Integration Services. Однако в зависимости от операции или функции операнды и аргументы требуют определенных типов данных. Средство оценки выражений налагает следующие ограничения на типы данных, используемые в выражениях.

  • Операнды логических операций должны преобразовываться в тип Boolean. Например, ColumnA > 1&&ColumnB < 2.

  • Операнды математических операций должны преобразовываться в числовые значения. Например, 23.75 * 4.

  • Операнды, используемые в операторах сравнения, например, логических операциях и операциях равенства, должны иметь совместимые типы данных.

    Например, в одном из выражений в следующем примере используется тип данных 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. Этот пример возвращает значение TRUE, поскольку преобразованное выражение принимает значение «999-10-12 00:00:00.000 +00:00», которое не равно значению другого выражения — (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30".

  • Аргументы, передаваемые математическим функциям, должны преобразовываться в числовые типы данных. В зависимости от функции или операции может потребоваться определенный тип числовых данных. Например, функция HEX требует целого числа со знаком или без знака.

  • Аргументы, передаваемые строковым функциям, должны иметь символьные типы данных: DT_STR или DT_WSTR. Например, UPPER(«цветок»). Некоторые строковые функции, такие как SUBSTRING, требуют дополнительных целочисленных аргументов, указывающих начальную позицию и длину строки.

  • Аргументы, передаваемые функциям даты и времени, должны преобразовываться в допустимую дату. Например, DAY(GETDATE()). Некоторые функции, такие как DATEADD, требуют дополнительного целочисленного аргумента, указывающего число дней, которые добавляются к дате.

Операции, в которых участвуют восьмибайтовое целое число без знака и целое число со знаком, требуют явного приведения для уточнения формата результата. Дополнительные сведения см. в разделе Приведение (выражение Integration Services).

Результаты многих операций и функций имеют предопределенные типы данных. Это может быть тип данных аргумента или тип данных, к которому средство оценки выражений приводит результат. Например, результат логического оператора ИЛИ (||) всегда имеет тип Boolean, результат функции ABS имеет численный тип данных аргумента, результат операции умножения имеет наименьший численный тип, который может представить результат без потери точности. Дополнительные сведения о типах данных результатов см. в разделе Операторы (выражение Integration Services) и Функции (выражение Integration Services).

Использование выражения в компоненте потока данных