식의 Integration Services 데이터 형식

적용 대상: Azure Data Factory의 SQL Server SSIS Integration Runtime

식 계산기는 Integration Services 데이터 형식을 사용합니다. 데이터가 Integration Services 패키지의 데이터 흐름에 처음 포함될 때 데이터 흐름 엔진이 모든 열 데이터를 Integration Services 데이터 형식으로 변환하므로 식에 사용되는 열 데이터는 이미 Integration Services 데이터 형식입니다. 조건부 분할 및 파생 열 변환에 사용된 식은 열 데이터가 포함된 데이터 흐름에 속해 있으므로 열을 참조할 수 있습니다.

variables

식은 변수를 사용할 수도 있습니다. 변수는 Variant 데이터 형식으로, 식 계산기는 식을 계산하기 전에 변수의 데이터 형식을 Variant 하위 형식에서 Integration Services 데이터 형식으로 변환합니다. 변수는 Integration Services 데이터 형식의 하위 집합만 사용할 수 있습니다. 예를 들어 변수는 BLOB(Binary Large Object Block) 데이터 형식을 사용할 수 없습니다.

Variant 데이터 형식을 Integration Services 데이터 형식으로 매핑하는 방법과 Integration Services 데이터 형식에 대한 자세한 내용은 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. 두 번째 식의 경우 NULL(DT_WSTR, ...)을 사용하므로 오류 없이 실행됩니다.

  3. 세 번째 식은 식 내에서 NULL(DT_STR, ...)을 사용하기 때문에 오류를 발생합니다.

  4. 네 번째 식은 식 내에서 NULL(DT_STR, ...)의 결과를 캐스팅하기 때문에 오류 없이 실행됩니다.

    식 계산기는 연산이 식의 루트 수준에 있지 않다는 것을 인식하므로 이 캐스트를 지능적으로 처리하고 DT_STR 않는 DT_WSTR 캐스팅합니다.

다음 예제에서는 캐스팅의 효과를 보여 줍니다.

Casting strings in SSIS expressions

  1. 첫 번째 식에서는 식의 루트 수준에서 캐스팅이 수행되지 않습니다. 식 계산기는 이 캐스트를 지능적으로 처리하고 DT_STR 않고 DT_WSTR 캐스팅합니다. 식은 DT_WSTR 반환합니다.

  2. 두 번째 식에서 캐스트는 식의 루트 수준에 있습니다. 식은 DT_STR 반환합니다.

암시적 데이터 변환

식 계산기가 데이터를 한 데이터 형식에서 다른 데이터 형식으로 자동으로 변환할 때 데이터 형식의 암시적 변환이 발생합니다. 예를 들어 smallintint비교되는 경우 smallint는 비교가 수행되기 전에 암시적으로 int로 변환됩니다.

인수 및 피연산자에 호환되지 않는 데이터 형식이 있는 경우 식 계산기는 암시적 데이터 변환을 수행할 수 없습니다. 또한 식 계산기는 값을 부울로 암시적으로 변환할 수 없습니다. 대신 캐스트 연산자를 사용하여 인수와 피연산자를 명시적으로 변환해야 합니다. 자세한 내용은 캐스트(SSIS 식)를 참조하세요.

다음 다이어그램에서는 BINARY 작업의 암시적 변환의 결과 형식을 보여 줍니다. 이 테이블에서 열과 행의 교집합은 왼쪽(원본) 및 오른쪽(대상) 유형의 피연산자가 있는 이진 연산의 결과 유형입니다.

Implicit data type conversion between data types

부호 있는 정수와 부호 없는 정수의 교집합은 두 인수보다 큰 부호 있는 정수입니다.

연산자는 문자열, 날짜, 부울 및 기타 데이터 형식을 비교합니다. 연산자가 두 값을 비교하기 전에 식 계산기는 특정 암시적 변환을 수행합니다. 식 계산기는 항상 문자열 리터럴을 DT_WSTR 데이터 형식으로 변환하고 부울 리터럴을 DT_BOOL 데이터 형식으로 변환합니다. 식 계산기는 따옴표로 묶인 모든 값을 문자열로 해석합니다. 숫자 리터럴은 Integration Services 숫자 데이터 형식 중 하나로 변환됩니다.

참고 항목

부울 값은 숫자가 아니라 논리 값입니다. 부울 값은 일부 환경에서 숫자로 표시될 수 있지만 숫자로 저장되지 않으며 다양한 프로그래밍 언어는 .NET Framework 메서드와 마찬가지로 부울 값을 숫자 값으로 다르게 나타냅니다.

예를 들어 Visual Basic에서 사용할 수 있는 변환 함수는 True를 -1로 변환합니다. 그러나 .NET Framework의 System.Convert.ToInt32 메서드는 True를 +1로 변환합니다. Integration Services 식 언어는 True를 -1로 변환합니다.

오류 또는 예기치 않은 결과를 방지하려면 TrueFalse의 특정 숫자 값을 사용하는 코드를 작성하면 안 됩니다. 가능한 경우 부울 변수의 사용을 디자인된 논리 값으로 제한해야 합니다.

자세한 내용은 아래 항목을 참조하세요.

단일 인수를 사용하는 함수는 다음과 같은 예외를 제외하고 인수와 동일한 데이터 형식의 결과를 반환합니다.

  • DAY, MONTH 및 YEAR는 날짜를 수락하고 정수(DT_I4) 결과를 반환합니다.

  • ISNULL은 모든 SSIS 데이터 형식의 식을 받아서 부울(DT_BOOL) 결과를 반환합니다.

  • SQUARE 및 SQRT는 숫자 식을 받아서 비정수 숫자(DT_R8) 결과를 반환합니다.

인수의 데이터 형식이 같으면 결과도 해당 형식이 됩니다. 유일한 예외는 DT_NUMERIC 데이터 형식의 결과를 반환하는 DT_DECIMAL 데이터 형식의 두 값에 대한 이진 연산의 결과입니다.

식에 사용되는 데이터에 대한 요구 사항

식 계산기는 모든 Integration Services 데이터 형식을 지원합니다. 그러나 작업 또는 함수에 따라 피연산자와 인수에는 특정 데이터 형식이 필요합니다. 식 계산기는 식에 사용되는 데이터에 다음과 같은 데이터 형식 요구 사항을 적용합니다.

  • 논리 작업에 사용되는 피연산자는 부울로 평가되어야 합니다. 예를 들어 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 변환합니다. 변환된 식이 다른 (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30"식의 값과 같지 않은 "1999-10-12 00:00:00.000 +00:00"이 되므로 이 예제는 TRUE로 평가됩니다.

  • 수치 연산 함수에 전달된 인수는 숫자 데이터 형식이어야 합니다. 함수나 연산에 따라 특정 숫자 데이터 형식이 필요할 수 있습니다. 예를 들어 HEX 함수는 부호 있는 정수나 부호 없는 정수가 필요합니다.

  • 문자열 함수에 전달된 인수는 문자 데이터 형식(DT_STR 또는 DT_WSTR)으로 평가되어야 합니다. 예를 들어 UPPER("flower")입니다. SUBSTRING과 같은 일부 문자열 함수에는 시작 위치 및 문자열 길이에 대한 추가 정수 인수가 필요합니다.

  • 날짜 및 시간 함수에 전달된 인수는 유효한 날짜로 평가되어야 합니다. 예를 들어 DAY(GETDATE())입니다. DATEADD와 같은 일부 함수에는 함수가 날짜에 추가하는 일 수에 대한 추가 정수 인수가 필요합니다.

부호 없는 8 바이트 정수와 부호 있는 정수를 결합하는 작업에는 결과 형식을 명확히 하기 위해 명시적 캐스트가 필요합니다. 자세한 내용은 캐스트(SSIS 식)를 참조하세요.

많은 작업 및 함수의 결과에는 미리 결정된 데이터 형식이 있습니다. 인수의 데이터 형식 또는 식 계산기가 결과를 캐스팅하는 데이터 형식일 수 있습니다. 예를 들어 논리 OR 연산자(||)의 결과는 항상 부울이고, ABS 함수의 결과는 인수의 숫자 데이터 형식이며, 곱하기 결과는 손실 없이 결과를 보유할 수 있는 가장 작은 숫자 데이터 형식입니다. 결과의 데이터 형식에 대한 자세한 내용은 연산자(SSIS 식)함수(SSIS 식)를 참조하세요.

데이터 흐름 구성 요소에서 식 사용