스크립트 태스크에서 변수 사용Using Variables in the Script Task

스크립트 태스크에서는 변수를 통해 패키지의 다른 개체와 데이터를 교환할 수 있습니다.Variables make it possible for the Script task to exchange data with other objects in the package. 자세한 내용은 Integration Services(SSIS) 변수를 참조하세요.For more information, see Integration Services (SSIS) Variables.

스크립트 태스크에서 사용 하는 Variables 의 속성은 Dts 개체에서 읽기 및 쓰기를 Variable 패키지의 개체입니다.The Script task uses the Variables property of the Dts object to read from and write to Variable objects in the package.

참고

Value 의 속성은 Variable 클래스 형식의 개체합니다.The Value property of the Variable class is of type Object. 스크립트 태스크에 있기 때문에 Option Strict 캐스팅 해야 사용 하도록 설정 된 Value 속성을 사용 하려면 먼저 적절 한 형식입니다.Because the Script task has Option Strict enabled, you must cast the Value property to the appropriate type before you can use it.

기존 변수를 추가 ReadOnlyVariablesReadWriteVariables 에 나열 된 스크립트 태스크 편집기 사용자 지정 스크립트를 사용할 수 있도록 합니다.You add existing variables to the ReadOnlyVariables and ReadWriteVariables lists in the Script Task Editor to make them available to the custom script. 변수 이름은 대/소문자를 구분합니다.Keep in mind that variable names are case-sensitive. 스크립트를 통해 두 유형의 변수에 액세스할는 Variables 의 속성은 Dts 개체입니다.Within the script, you access variables of both types through the Variables property of the Dts object. 사용 하 여는 개별 변수를 읽고 속성입니다.Use the Value property to read from and write to individual variables. 스크립트 태스크에서는 스크립트가 변수 값을 읽고 수정할 때 잠금을 투명하게 관리합니다.The Script task transparently manages locking as the script reads and modifies the values of variables.

Contains 속성에서 반환된 Variables 컬렉션의 Variables 메서드를 사용하여 코드에서 변수를 사용하기 전에 해당 변수가 있는지 여부를 확인할 수 있습니다.You can use the Contains method of the Variables collection returned by the Variables property to check for the existence of a variable before using it in your code.

사용할 수도 있습니다는 VariableDispenser 속성 (Dts.VariableDispenser)에 스크립트 태스크에서 변수 작업을 수행 합니다.You can also use the VariableDispenser property (Dts.VariableDispenser) to work with variables in the Script task. VariableDispenser를 사용하는 경우 개발자가 자신의 고유 코드에서 잠금 의미 체계와 변수 값에 대한 데이터 형식 캐스팅을 모두 처리해야 합니다.When using the VariableDispenser, you must handle both the locking semantics and the casting of data types for variable values in your own code. 디자인 타임에는 사용할 수 없지만 런타임에 프로그래밍 방식으로 만들어지는 변수를 사용하려면 VariableDispenser 속성 대신 Variables 속성을 사용해야 합니다.You may need to use the VariableDispenser property instead of the Variables property if you want to work with a variable that is not available at design time but is created programmatically at run time.

Foreach 루프 컨테이너 내에서 스크립트 태스크 사용Using the Script Task within a Foreach Loop Container

스크립트 태스크가 Foreach 루프 컨테이너 내에서 반복적으로 실행되는 경우 스크립트는 일반적으로 열거자에서 현재 항목의 내용을 사용해야 합니다.When a Script task runs repeatedly within a Foreach Loop container, the script usually needs to work with the contents of the current item in the enumerator. 예를 들어 Foreach File 열거자를 사용하는 경우에는 스크립트에서 현재 파일 이름을 알고 있어야 하며, Foreach ADO 열거자를 사용하는 경우에는 스크립트에서 현재 데이터 행의 열 내용을 알고 있어야 합니다.For example, when using a Foreach File enumerator, the script needs to know the current file name; when using a Foreach ADO enumerator, the script needs to know the contents of the columns in the current row of data.

변수는 Foreach 루프 컨테이너와 스크립트 태스크 간의 이 통신을 가능하게 해 줍니다.Variables make this communication between the Foreach Loop container and the Script task possible. 변수 매핑 의 페이지는 Foreach 루프 편집기, 열거 된 단일 항목에서 반환 되는 데이터의 각 항목에 변수를 할당 합니다.On the Variable Mappings page of the Foreach Loop Editor, assign variables to each item of data that is returned by a single enumerated item. 예를 들어 Foreach File 열거자는 인덱스 0 위치의 파일 이름만 반환하므로 변수 매핑이 하나만 필요한 반면, 각 행의 여러 데이터 열을 반환하는 열거자의 경우에는 스크립트 태스크에서 사용할 각 열에 서로 다른 변수를 매핑해야 합니다.For example, a Foreach File enumerator returns only a file name at Index 0 and therefore requires only one variable mapping, whereas an enumerator that returns several columns of data in each row requires you to map a different variable to each column that you want to use in the Script task.

열거 된 항목을 변수에 매핑하면 매핑된 변수를를 추가 해야 합니다는 ReadOnlyVariables 속성에는 스크립트 의 페이지는 스크립트 태스크 편집기 스크립트에 사용할 수 있도록 합니다.After you have mapped enumerated items to variables, then you must add the mapped variables to the ReadOnlyVariables property on the Script page of the Script Task Editor to make them available to your script. 폴더에 이미지 파일을 처리 하는 Foreach 루프 컨테이너 내에서 스크립트 태스크의 예제를 보려면 스크립트 태스크를 사용한 이미지 작업합니다.For an example of a Script task within a Foreach Loop container that processes the image files in a folder, see Working with Images with the Script Task.

변수 예Variables Example

다음 예에서는 스크립트 태스크에서 변수에 액세스하고 이를 사용하여 패키지 워크플로의 경로를 확인하는 방법을 보여 줍니다.The following example demonstrates how to access and use variables in a Script task to determine the path of package workflow. 이 예에서는 라는 정수 변수를 만든 CustomerCountMaxRecordCount 를 추가 하 고는 ReadOnlyVariables 컬렉션에는 스크립트 태스크 편집기합니다.The sample assumes that you have created integer variables named CustomerCount and MaxRecordCount and added them to the ReadOnlyVariables collection in the Script Task Editor. CustomerCount 변수에는 가져올 고객 레코드 수가 들어 있습니다.The CustomerCount variable contains the number of customer records to be imported. 이 값이 MaxRecordCount 값보다 크면 스크립트 태스크에서 실패가 보고됩니다.If its value is greater than the value of MaxRecordCount, the Script task reports failure. MaxRecordCount 임계값 초과로 인해 실패할 경우 워크플로의 오류 경로에서 필요한 정리 작업을 구현할 수 있습니다.When a failure occurs because the MaxRecordCount threshold has been exceeded, the error path of the workflow can implement any required clean-up.

이 예제를 컴파일하려면 Microsoft.SqlServer.ScriptTask 어셈블리에 대한 참조를 추가해야 합니다.To successfully compile the sample, you need to add a reference to the Microsoft.SqlServer.ScriptTask assembly.

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;  
        }  

    }  

}  

참고 항목See Also

Integration Services ( Ssis) 변수 Integration Services (SSIS) Variables
패키지에서 변수 사용Use Variables in Packages