스크립트 태스크에서 변수 사용
적용 대상: Azure Data Factory의 SQL Server SSIS Integration Runtime
변수를 사용하면 스크립트 태스크가 패키지의 다른 개체와 데이터를 교환할 수 있습니다. 자세한 정보는 Integration Services(SSIS) 변수를 참고해 주세요.
스크립트 태스크는 패키지의 개체에서 읽고 쓰는 Variable Dts 개체의 속성을 사용합니다Variables.
참고 항목
Value 클래스의 Variable 속성은 Object 형식입니다. 스크립트 태스크에 Option Strict를 사용하도록 설정되었으므로 속성을 사용하려면 먼저 해당 형식으로 캐스팅 Value 해야 합니다.
기존 변수를 ReadOnlyVariables 스크립트 태스크 편집기 및 ReadWriteVariables 목록에 추가하여 사용자 지정 스크립트에서 사용할 수 있도록 합니다. 변수 이름은 대/소문자를 구분합니다. 스크립트 내에서는 Dts 개체의 Variables 속성을 통해 두 유형의 변수에 액세스합니다. 개별 변수를 읽고 쓰는 데는 Value 속성을 사용합니다. 스크립트 태스크에서는 스크립트가 변수 값을 읽고 수정할 때 잠금을 투명하게 관리합니다.
코드에서 변수를 Contains Variables 사용하기 전에 속성에서 반환된 Variables 컬렉션의 메서드를 사용하여 변수가 있는지 확인할 수 있습니다.
속성(Dts.VariableDispenser)을 사용하여 VariableDispenser 스크립트 태스크에서 변수를 사용할 수도 있습니다. 이 함수를 VariableDispenser사용하는 경우 사용자 고유의 코드에서 변수 값에 대한 데이터 형식의 잠금 의미 체계와 캐스팅을 모두 처리해야 합니다. 디자인 타임에 사용할 수 없지만 런타임에 프로그래밍 방식으로 만들어진 변수를 사용하려면 속성 대신 Variables 속성을 사용해야 VariableDispenser 할 수 있습니다.
Foreach 루프 컨테이너 내에서 스크립트 태스크 사용
스크립트 태스크가 Foreach 루프 컨테이너 내에서 반복적으로 실행되는 경우 스크립트는 일반적으로 열거자에서 현재 항목의 내용으로 작업해야 합니다. 예를 들어 Foreach File 열거자를 사용하는 경우에는 스크립트에서 현재 파일 이름을 알고 있어야 하며, Foreach ADO 열거자를 사용하는 경우에는 스크립트에서 현재 데이터 행의 열 내용을 알고 있어야 합니다.
변수를 사용하면 Foreach 루프 컨테이너와 스크립트 태스크 간의 통신이 가능합니다. Foreach 루프 편집기의 변수 매핑 페이지에서 열거된 단일 항목에서 반환되는 데이터의 각 항목에 변수를 할당합니다. 예를 들어 Foreach File 열거자는 인덱스 0에서 파일 이름만 반환하므로 변수 매핑이 하나만 필요한 반면, 각 행의 여러 데이터 열을 반환하는 열거자는 스크립트 태스크에서 사용하려는 각 열에 다른 변수를 매핑해야 합니다.
열거형 항목을 변수에 매핑한 후에는 스크립트 태스크 편집기의 스크립트 페이지에 있는 ReadOnlyVariables 속성에 매핑된 변수를 추가하여 스크립트에서 사용할 수 있도록 해야 합니다. 폴더의 이미지 파일을 처리하는 Foreach 루프 컨테이너 내의 스크립트 태스크 예제는 스크립트 태스크를 사용하여 이미지 작업을 참조 하세요.
변수 예
다음 예제에서는 스크립트 태스크에서 변수에 액세스하고 사용하여 패키지 워크플로의 경로를 확인하는 방법을 보여 줍니다. 샘플에서는 명명 CustomerCount
MaxRecordCount
된 정수 변수를 만들어 스크립트 태스크 편집기에서 ReadOnlyVariables 컬렉션에 추가했다고 가정합니다. 변수에는 CustomerCount
가져올 고객 레코드 수가 포함됩니다. 이 값이 MaxRecordCount
값보다 크면 스크립트 태스크에서 실패가 보고됩니다. 임계값을 MaxRecordCount
초과하여 오류가 발생하면 워크플로의 오류 경로가 필요한 정리를 구현할 수 있습니다.
이 예제를 컴파일하려면 Microsoft.SqlServer.ScriptTask 어셈블리에 대한 참조를 추가해야 합니다.
Public Sub Main()
Dim customerCount As Integer
Dim maxRecordCount As Integer
If Dts.Variables.Contains("CustomerCount") = True AndAlso _
Dts.Variables.Contains("MaxRecordCount") = True Then
customerCount = _
CType(Dts.Variables("CustomerCount").Value, Integer)
maxRecordCount = _
CType(Dts.Variables("MaxRecordCount").Value, Integer)
End If
If customerCount > maxRecordCount Then
Dts.TaskResult = ScriptResults.Failure
Else
Dts.TaskResult = ScriptResults.Success
End If
End Sub
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
public class ScriptMain
{
public void Main()
{
int customerCount;
int maxRecordCount;
if (Dts.Variables.Contains("CustomerCount")==true&&Dts.Variables.Contains("MaxRecordCount")==true)
{
customerCount = (int) Dts.Variables["CustomerCount"].Value;
maxRecordCount = (int) Dts.Variables["MaxRecordCount"].Value;
}
if (customerCount>maxRecordCount)
{
Dts.TaskResult = (int)ScriptResults.Failure;
}
else
{
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}