다음을 통해 공유


식의 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(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 형식을 사용합니다.

다음 스크린샷의 식을 고려합니다.

SSIS 식의 문자열 데이터 형식

  1. 첫 번째 식의 경우 NULL(DT_STR, ...) 함수가 식의 루트 수준에 있으므로 오류 없이 실행됩니다.

  2. 두 번째 식의 경우 NULL(DT_WSTR, ...)을 사용하므로 오류 없이 실행됩니다.

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

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

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

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

SSIS 식의 문자열 캐스팅

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

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

암시적 데이터 변환

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

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

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

데이터 형식 간의 암시적 데이터 형식 변환

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

연산자는 문자열, 날짜, 부울, 기타 데이터 형식을 비교합니다. 연산자가 두 개의 값을 비교하기 전에 식 계산기는 특정 암시적 변환을 수행합니다. 식 계산기는 항상 문자열 리터럴을 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 식)를 참조하세요.

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