식에서의 Integration Services 데이터 형식Integration Services Data Types in Expressions

식 계산기는 Integration ServicesIntegration Services 데이터 형식을 사용합니다.The expression evaluator uses Integration ServicesIntegration Services data types. 데이터가 Integration ServicesIntegration Services 패키지의 데이터 흐름에 처음 포함될 때 데이터 흐름 엔진이 모든 열 데이터를 Integration ServicesIntegration Services 데이터 형식으로 변환하므로 식에 사용되는 열 데이터는 이미 Integration ServicesIntegration Services 데이터 형식입니다.When data first enters a data flow in an Integration ServicesIntegration Services package, the data flow engine converts all column data to an Integration ServicesIntegration Services data type, and the column data that an expression uses already has an Integration ServicesIntegration Services data type. 조건부 분할 및 파생 열 변환에 사용된 식은 열 데이터가 포함된 데이터 흐름에 속해 있으므로 열을 참조할 수 있습니다.Expressions used in the Conditional Split and the Derived Column transformations can reference columns because they are part of a data flow that includes column data.

변수Variables

식에 변수를 사용할 수도 있습니다.Expressions can also use variables. 변수는 Variant 데이터 형식으로, 식 계산기는 식을 계산하기 전에 변수의 데이터 형식을 Variant 하위 형식에서 Integration ServicesIntegration Services 데이터 형식으로 변환합니다.Variables have a Variant data type and the expression evaluator converts the data type of a variable from a Variant subtype to an Integration ServicesIntegration Services data type before it evaluates the expression. 변수는 Integration ServicesIntegration Services 데이터 형식의 하위 집합만 사용할 수 있습니다.Variables can use only a subset of the Integration ServicesIntegration Services data types. 예를 들어 변수는 BLOB(Binary Large Object Block) 데이터 형식을 사용할 수 없습니다.For example, a variable cannot use a Binary Large Object Block (BLOB) data type.

Variant 데이터 형식을 Integration ServicesIntegration Services 데이터 형식으로 매핑하는 방법과 Integration ServicesIntegration Services 데이터 형식에 대한 자세한 내용은 Integration Services 데이터 형식을 참조하세요.For more information about Integration ServicesIntegration Services data types and the mapping of Variant data types to Integration ServicesIntegration Services data types, see Integration Services Data Types.

리터럴Literals

또한 식은 문자열, 부울 및 숫자 리터럴을 포함할 수 있습니다.In addition, expressions can include string, Boolean, and numeric literals. 숫자 리터럴을 Integration ServicesIntegration Services 숫자 데이터 형식으로 변환하는 방법은 리터럴(SSIS)을 참조하세요.For more information about converting numeric literals to numeric Integration ServicesIntegration Services data types, see Literals (SSIS).

문자열Strings

DT_STR 또는 DT_WSTR을 식의 반환 형식으로 사용할 수 있습니다.You can use either DT_STR or DT_WSTR as the return type of an expression. 그러나 식 내에서는 DT_WSTR만 지원되며 DT_STR 값은 DT_WSTR 값으로 변환됩니다.Inside an expression, however, only DT_WSTR is supported, and DT_STR values are converted to DT_WSTR values. 식을 작성할 때는 이 동작과 관련하여 아래의 몇 가지 사항을 고려해야 합니다.This behavior has several implications when you're writing an expression.

  • 식 내에서는 NULL(DT_STR, ...) 대신 NULL(DT_WSTR, ...)을 사용합니다. 이 함수에 대한 자세한 내용은 NULL(SSIS 식)을 참조하세요.Inside an expression, use NULL(DT_WSTR, ...) instead of NULL(DT_STR, ...). For more info about this function, see NULL (SSIS Expression).

  • 식 내에서 식의 최종 결과를 반환할 때는 CAST 함수를 사용하여 식 루트에서 값을 DT_STR 형식으로 캐스팅하는 방식만 사용 가능합니다.Inside an expression, you can only use the CAST function to cast a value to the DT_STR type at the root of the expression - that is, when you are returning the final result of the expression. 그 외의 경우에는 식 내에서 DT_WSTR 형식을 사용합니다.Otherwise, use the DT_WSTR type within in expression.

    다음 스크린샷에 나와 있는 식을 살펴보세요.Consider the expressions in the following screen shot.

    SSIS 식의 문자열 데이터 형식String data types in SSIS expressions

  1. 첫 번째 식의 경우 NULL(DT_STR, ...)이 식의 루트 수준에 있으므로 오류 없이 실행됩니다.The first expression runs without error because the NULL(DT_STR, ...) function is at the root level of the expression.

  2. 두 번째 식의 경우 NULL(DT_WSTR, ...)을 사용하므로 오류 없이 실행됩니다.The second expression runs without error because it uses NULL(DT_WSTR, ...).

  3. 세 번째 식의 경우 식 내에서 NULL(DT_STR, ...)을 사용하므로 오류가 발생합니다.The third expression raises an error because it uses NULL(DT_STR, ...) inside the expression.

  4. 네 번째 식의 경우 식 내에서 NULL(DT_STR, ...)의 결과를 캐스팅하므로 오류 없이 실행됩니다.The fourth expression runs without error because it casts the result of NULL(DT_STR, ...) inside the expression.

    식 평가기는 식의 루트 수준에서 연산이 수행되지 않음을 인식하므로 이 캐스팅을 지능적으로 처리하여 DT_STR이 아닌 DT_WSTR로 캐스팅합니다.The expression evaluator handles this cast intelligently and casts to DT_WSTR, not to DT_STR, because it recognizes that the operation is not at the root level of the expression.

    다음 예에서는 캐스팅의 효과를 보여 줍니다.The following examples demonstrate the effects of casting.

    SSIS 식의 문자열 캐스팅Casting strings in SSIS expressions

  5. 첫 번째 식에서는 식의 루트 수준에서 캐스팅이 수행되지 않습니다.In the first expression, the cast is not at the root level of the expression. 식 평가기는 이 캐스팅을 지능적으로 처리하여 DT_STR이 아닌 DT_WSTR로 캐스팅합니다.The expression evaluator handles this cast intelligently and casts to DT_WSTR, not to DT_STR. 식은 DT_WSTR을 반환합니다.The expression returns DT_WSTR.

  6. 두 번째 식에서는 식의 루트 수준에서 캐스팅이 수행됩니다.In the second expression, the cast is at the root level of the expression. 식은 DT_STR을 반환합니다.The expression returns DT_STR.

암시적 데이터 변환Implicit Data Conversion

데이터 형식의 암시적 변환은 식 계산기가 자동으로 데이터를 한 데이터 형식에서 다른 데이터 형식으로 변환할 때 발생합니다.An implicit conversion of a data type occurs when the expression evaluator automatically converts the data from one data type to another. 예를 들어 smallintint와 비교하는 경우 smallint 는 비교되기 전에 암시적으로 int 로 변환됩니다.For example, if a smallint is compared to an int, the smallint is implicitly converted to int before the comparison is performed.

인수와 피연산자의 데이터 형식이 호환되지 않는 경우 식 계산기는 암시적 데이터 변환을 수행할 수 없습니다.The expression evaluator cannot perform implicit data conversion when the arguments and operands have incompatible data types. 또한 식 계산기는 암시적으로 임의의 값을 부울로 변환할 수 없습니다.In addition, the expression evaluator cannot implicitly convert any value to a Boolean. 대신 인수 및 피연산자는 캐스트 연산자를 사용하여 명시적으로 변환해야 합니다.Instead, the arguments and operands must be explicitly converted by using the cast operator. 자세한 내용은 캐스트(SSIS 식)를 참조하세요.For more information, see Cast (SSIS Expression).

다음 다이어그램에서는 BINARY 연산의 암시적 변환의 결과 유형을 보여 줍니다.The following diagram shows the result type of implicit conversions of BINARY operations. 이 테이블에서 열과 행의 교집합은 왼쪽(원본) 및 오른쪽(대상) 유형의 피연산자가 있는 이진 연산의 결과 유형입니다.The intersection of column and row in this table is the result type of a binary operation with operands of the left (From) and right (To) types.

데이터 형식 간 암시적 데이터 형식 변환Implicit data type conversion between data types

부호 있는 정수와 부호 없는 정수의 교집합은 두 인수 중 하나보다 클 수도 있는 부호 있는 정수입니다.The intersection of a signed and an unsigned integer is a signed integer that is potentially larger than either argument.

연산자는 문자열, 날짜, 부울 및 기타 데이터 형식을 비교합니다.Operators compare strings, dates, Booleans, and other data types. 연산자가 두 값을 비교하기 전에 식 계산기는 특정 암시적 변환을 수행합니다.Before an operator compares two values, the expression evaluator performs certain implicit conversions. 식 계산기는 항상 문자열 리터럴을 DT_WSTR 데이터 형식으로 변환하고 부울 리터럴을 DT_BOOL 데이터 형식으로 변환합니다.The expression evaluator always converts string literals to the DT_WSTR data type and converts Boolean literals to the DT_BOOL data type. 식 계산기는 따옴표로 묶인 모든 값을 문자열로 해석합니다.The expression evaluator interprets all values enclosed in quotation marks as strings. 숫자 리터럴은 Integration ServicesIntegration Services 숫자 데이터 형식 중 하나로 변환됩니다.Numeric literals are converted to one of the numeric Integration ServicesIntegration Services data types.

참고

부울 값은 숫자가 아니라 논리 값입니다.Boolean values are logical values, not numbers. 일부 환경에서는 부울 값이 숫자로 표시될 수 있지만 숫자로 저장되지는 않으며, 다양한 프로그래밍 언어에서는 부울 값을 .NET Framework 메서드와는 다른 숫자 값으로 표시합니다.Although Boolean values may be displayed as numbers in some environments, they are not stored as numbers, and various programming languages represent Boolean values as numeric values differently, as do the .NET Framework methods.

예를 들어 Visual Basic에서 사용할 수 있는 변환 함수는 True 를 -1로 변환하지만 .NET Framework의 System.Convert.ToInt32 메서드는 True 를 +1로 변환합니다.For example, the conversion functions available in Visual Basic convert True to -1; however, the System.Convert.ToInt32 method in the .NET Framework converts True to +1. Integration ServicesIntegration Services 식 언어는 True 를 -1로 변환합니다.The Integration ServicesIntegration Services Expression Language converts True to -1.

오류나 예기치 않은 결과를 방지하려면 TrueFalse에 특정 숫자 값을 사용하는 코드를 작성하지 말아야 합니다.To avoid errors or unexpected results, you should not write code that relies on particular numeric values for True and False. 가능하면 부울 변수는 부울 변수용으로 설계된 논리 값으로만 사용해야 합니다.Wherever possible, you should restrict usage of Boolean variables to the logical values for which they are designed.

자세한 내용은 다음 항목을 참조하세요.For more information, see the following topics:

  • == (같음)(SSIS 식)== (Equal) (SSIS Expression)

  • [!= (같지 않음)(SSIS 식)](../../integration-services/expressions/unequal-ssis-expression.md)(../../integration-services/expressions/unequal-ssis-expression.md)

  • >(보다 큼)(SSIS 식)> (Greater Than) (SSIS Expression)

  • <(보다 작음)(SSIS 식)< (Less Than) (SSIS Expression)

  • >=(크거나 같음)(SSIS 식)>= (Greater Than or Equal To) (SSIS Expression)

  • <=(작거나 같음)(SSIS 식)<= (Less Than or Equal To) (SSIS Expression)

    인수가 하나인 함수는 다음과 같은 경우를 제외하고 해당 인수의 데이터 형식으로 결과를 반환합니다.A function that uses a single argument returns a result with the same data type as the argument, with the following exceptions:

  • DAY, MONTH 및 YEAR는 날짜를 받아서 정수(DT_I4) 결과를 반환합니다.DAY, MONTH, and YEAR accept a date and return an integer (DT_I4) result.

  • ISNULL은 모든 SSISSSIS 데이터 형식의 식을 받아서 부울(DT_BOOL) 결과를 반환합니다.ISNULL accepts an expression of any SSISSSIS data type and returns a Boolean (DT_BOOL) result.

  • SQUARE 및 SQRT는 숫자 식을 받아서 비정수 숫자(DT_R8) 결과를 반환합니다.SQUARE and SQRT accept a numeric expression and return a non-integral numeric (DT_R8) result.

    인수의 데이터 형식이 같으면 결과도 해당 형식이 됩니다.If the arguments have the same data type, the result is of that type. 단, DT_DECIMAL 데이터 형식의 두 값에 대한 이진 연산의 반환 결과는 DT_NUMERIC 데이터 형식입니다.The only exception is the result of a binary operation on two values with the DT_DECIMAL data type, which returns a result with the DT_NUMERIC data type.

식에 사용되는 데이터에 대한 요구 사항Requirements for Data Used in Expressions

식 계산기는 모든 Integration ServicesIntegration Services 데이터 형식을 지원합니다.The expression evaluator supports all Integration ServicesIntegration Services data types. 그러나 연산이나 함수에 따라 피연산자와 인수에 특정 데이터 형식이 필요합니다.However, depending on the operation or the function, the operands and arguments require certain data types. 식 계산기는 식에 사용된 데이터에 대해 다음 데이터 형식 요구 사항을 설정합니다.The expression evaluator imposes the following data type requirements on data used in expressions:

  • 논리 연산에 사용된 피연산자는 부울 값이어야 합니다.Operands used in logical operations must evaluate to a Boolean. 예를 들어 ColumnA > 1&&ColumnB < 2가 있습니다.For example, ColumnA > 1&&ColumnB < 2.

  • 수치 연산에 사용된 피연산자는 숫자 값이어야 합니다.Operands used in mathematical operations must evaluate to a numeric value. 예를 들어 23.75 * 4와 같습니다.For example, 23.75 * 4.

  • 논리 및 등가 연산과 같은 비교 연산에 사용된 피연산자는 호환 가능한 데이터 형식이어야 합니다.Operands used in comparison operations, such as logical and equality operations, must evaluate to compatible data types.

    예를 들어 다음 예의 식 중 하나는 DT_DBTIMESTAMPOFFSET 데이터 형식을 사용합니다.For example, one of the expressions in the following example uses the DT_DBTIMESTAMPOFFSET data type:

    (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30" != (DT_DBDATE)"1999-10-12"

    시스템은 (DT_DBDATE)"1999-10-12"식을 DT_DBTIMESTAMPOFFSET으로 변환합니다.The system converts the expression, (DT_DBDATE)"1999-10-12", to DT_DBTIMESTAMPOFFSET. 변환된 식은 "1999-10-12 00:00:00.000 +00:00"이 되고, 이는 다른 식인 (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30"과 같지 않으므로 예는 TRUE로 계산됩니다.The example evaluates to TRUE because the converted expression becomes "1999-10-12 00:00:00.000 +00:00", which is not equal to the value of the other expression, (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30".

  • 수치 연산 함수에 전달된 인수는 숫자 데이터 형식이어야 합니다.Arguments passed to mathematical functions must evaluate to a numeric data type. 함수나 연산에 따라 특정 숫자 데이터 형식이 필요할 수 있습니다.Depending on the function or operation, a specific numeric data type may be required. 예를 들어 HEX 함수는 부호 있는 정수나 부호 없는 정수가 필요합니다.For example, the HEX function requires a signed or unsigned integer.

  • 문자열 함수에 전달된 인수는 DT_STR 또는 DT_WSTR과 같은 문자 데이터 형식이어야 합니다.Arguments passed to string functions must evaluate to a character data type: DT_STR or DT_WSTR. 예를 들어 UPPER("flower")와 같습니다.For example, UPPER("flower"). SUBSTRING과 같은 일부 문자열 함수는 시작 위치와 문자열 길이를 나타내는 추가 정수 인수가 필요합니다.Some string functions, such as SUBSTRING, require additional integer arguments for the start position and the length of the string.

  • 날짜 및 시간 함수에 전달된 인수는 유효한 날짜여야 합니다.Arguments passed to date and time functions must evaluate to a valid date. 예를 들어 DAY(GETDATE())와 같습니다.For example, DAY(GETDATE()). DATEADD와 같은 일부 함수는 날짜에 추가할 일 수를 나타내는 추가 정수 인수가 필요합니다.Some functions, such as DATEADD, require an additional integer argument for the number of days the function adds to a date.

    부호 없는 8바이트 정수와 부호 있는 정수를 결합하는 연산에서 결과 형식을 명확히 하려면 명시적 캐스트가 필요합니다.Operations that combine an unsigned eight-byte integer and a signed integer require an explicit cast to clarify the result format. 자세한 내용은 캐스트(SSIS 식)를 참조하세요.For more information, see Cast (SSIS Expression).

    많은 연산 및 함수 결과에는 미리 결정된 데이터 형식이 있습니다.Results of many operations and functions have predetermined data types. 인수의 데이터 형식이거나 식 계산기가 결과를 캐스팅하는 데이터 형식일 수 있습니다.This can be the data type of the argument or the data type to which the expression evaluator casts the result. 예를 들어 논리적 OR 연산자(||)의 결과는 항상 부울이고 ABS 함수의 결과는 인수의 숫자 데이터 형식이며 곱하기의 결과는 손실 없이 결과를 유지할 수 있는 가장 작은 숫자 데이터 형식입니다.For example, the result of a logical OR operator (||) is always a Boolean, the result of the ABS function is the numeric data type of the argument, and the result of multiplication is the smallest numeric data type that can hold the result without loss. 결과의 데이터 형식에 대한 자세한 내용은 연산자(SSIS 식)함수(SSIS 식)를 참조하세요.For more information about the data types of results, see Operators (SSIS Expression) and Functions (SSIS Expression).

데이터 흐름 구성 요소에서 식 사용Use an Expression in a Data Flow Component