스크립트 구성 요소를 사용하여 동기 변환 만들기Creating a Synchronous Transformation with the Script Component

적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) yes Azure Data Factory의 Azure-SSIS Integration RuntimeSSIS Integration Runtime in Azure Data Factoryyes Azure Data Factory의 Azure-SSIS Integration RuntimeSSIS Integration Runtime in Azure Data Factory적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) yes Azure Data Factory의 Azure-SSIS Integration RuntimeSSIS Integration Runtime in Azure Data Factoryyes Azure Data Factory의 Azure-SSIS Integration RuntimeSSIS Integration Runtime in Azure Data Factory

Integration ServicesIntegration Services 패키지의 데이터 흐름에서 변환 구성 요소를 사용하여 데이터가 원본에서 대상으로 전달될 때 데이터를 수정하고 분석할 수 있습니다.You use a transformation component in the data flow of an Integration ServicesIntegration Services package to modify and analyze data as it passes from source to destination. 동기 출력을 사용하는 변환에서는 각 입력 행이 이 구성 요소를 통해 전달될 때 이를 처리합니다.A transformation with synchronous outputs processes each input row as it passes through the component. 그러나 비동기 출력을 사용하는 변환에서는 입력 행을 모두 받을 때까지 기다렸다가 처리를 완료합니다.A transformation with asynchronous outputs waits until it has received all input rows to complete its processing. 이 항목에서는 동기 변환에 대해 설명합니다.This topic discusses a synchronous transformation. 비동기 변환에 대한 자세한 내용은 스크립트 구성 요소를 사용하여 비동기 변환 만들기를 참조하세요.For information about asynchronous transformations, see Creating an Asynchronous Transformation with the Script Component. 동기 구성 요소와 비동기 구성 요소 간의 차이점에 대한 자세한 내용은 동기 및 비동기 변환 이해를 참조하세요.For more information about the difference between synchronous and asynchronous components, see Understanding Synchronous and Asynchronous Transformations.

스크립트 구성 요소에 대한 개요는 스크립트 구성 요소를 사용하여 데이터 흐름 확장을 참조하세요.For an overview of the Script component, see Extending the Data Flow with the Script Component.

스크립트 구성 요소 및 해당 구성 요소가 생성하는 인프라 코드를 사용하면 사용자 지정 데이터 흐름 구성 요소를 개발하는 과정이 훨씬 간단해집니다.The Script component and the infrastructure code that it generates for you simplify significantly the process of developing a custom data flow component. 하지만 스크립트 구성 요소의 작동 방식을 이해하려면 사용자 지정 데이터 흐름 구성 요소 개발 섹션과 이 섹션의 동기 출력을 사용하여 사용자 지정 변환 구성 요소 개발에서 사용자 지정 데이터 흐름 구성 요소를 개발하는 데 필요한 단계를 파악하는 것이 좋습니다.However, to understand how the Script component works, you may find it useful to read the steps that you must follow in developing a custom data flow component in the section on Developing a Custom Data Flow Component, and especially Developing a Custom Transformation Component with Synchronous Outputs.

동기 변환 구성 요소 시작Getting Started with a Synchronous Transformation Component

SSISSSIS 디자이너의 데이터 흐름 창에 스크립트 구성 요소를 추가하면 원본, 대상 또는 변환 구성 요소 유형을 선택하기 위한 스크립트 구성 요소 유형 선택 대화 상자가 열립니다.When you add a Script component to the Data Flow pane of SSISSSIS Designer, the Select Script Component Type dialog box opens and prompts you to select a Source, Destination, or Transformation component type. 이 대화 상자에서 변환 을 선택합니다.In this dialog box, select Transformation.

메타데이터 디자인 모드에서 동기 변환 구성 요소 구성Configuring a Synchronous Transformation Component in Metadata-Design Mode

변환 구성 요소를 만드는 옵션을 선택한 후에는 스크립트 변환 편집기 를 사용하여 구성 요소를 구성합니다.After you select the option to create a transformation component, you configure the component by using the Script Transformation Editor. 자세한 내용은 스크립트 구성 요소 편집기에서 스크립트 구성 요소 구성을 참조하세요.For more information, see Configuring the Script Component in the Script Component Editor.

스크립트 구성 요소의 스크립트 언어를 설정하려면 스크립트 변환 편집기스크립트 페이지에서 ScriptLanguage 속성을 설정합니다.To set the script language for the Script component, you set the ScriptLanguage property on the Script page of the Script Transformation Editor.

注意

스크립트 구성 요소에 대한 기본 스크립트 언어를 설정하려면 옵션 대화 상자의 일반 페이지에서 스크립트 언어 옵션을 사용합니다.To set the default scripting language for the Script component, use the Scripting language option on the General page of the Options dialog box. 자세한 내용은 일반 페이지를 참조하세요.For more information, see eneral Page.

데이터 흐름 변환 구성 요소는 하나의 입력을 사용하며 하나 이상의 출력을 지원합니다.A data flow transformation component has one input, and supports one or more outputs. 구성 요소의 입력과 출력을 구성하는 것은 사용자 지정 스크립트를 작성하기 전에 메타데이터 디자인 모드에서 스크립트 변환 편집기 를 사용하여 완료해야 하는 단계 중 하나입니다.Configuring the input and outputs for the component is one of the steps that you must complete in metadata design mode, by using the Script Transformation Editor, before you write your custom script.

입력 열 구성Configuring Input Columns

변환 구성 요소에서는 하나의 입력을 사용합니다.A transformation component has one input.

스크립트 변환 편집기입력 열 페이지에 나타나는 열 목록에는 업스트림 데이터 흐름 구성 요소의 출력에서 가져온 사용 가능한 열이 표시됩니다.On the Input Columns page of the Script Transformation Editor, the column list shows the available columns from the output of the upstream component in the data flow. 이 목록에서 변환하거나 전달할 열을 선택합니다.Select the columns that you want to transform or pass through. 현재 위치에서 변환할 모든 열은 읽기/쓰기로 표시합니다.Mark any columns that you want to transform in place as Read/Write.

스크립트 변환 편집기입력 열 페이지에 대한 자세한 내용은 스크립트 변환 편집기(입력 열 페이지)를 참조하세요.For more information about the Input Columns page of the Script Transformation Editor, see Script Transformation Editor (Input Columns Page).

입력, 출력 및 출력 열 구성Configuring Inputs, Outputs, and Output Columns

변환 구성 요소는 하나 이상의 출력을 지원합니다.A transformation component supports one or more outputs.

스크립트 변환 편집기입/출력 페이지에서는 단일 출력이 만들어져 있지만 해당 출력에 열은 없음을 확인할 수 있습니다.On the Inputs and Outputs page of the Script Transformation Editor, you can see that a single output has been created, but the output has no columns. 편집기의 이 페이지에서 다음과 같은 항목을 구성할 수 있습니다.On this page of the editor, you may need or want to configure the following items.

  • 예기치 않은 값이 포함된 행에 대한 시뮬레이션된 오류 출력과 같은 추가 출력을 하나 이상 만들 수 있습니다.Create one or more additional outputs, such as a simulated error output for rows that contain unexpected values. 동기 변환 구성 요소의 출력을 관리하려면 출력 추가출력 제거 단추를 사용합니다.Use the Add Output and Remove Output buttons to manage the outputs of your synchronous transformation component. 각 행을 한 출력 또는 다른 출력으로 리디렉션하도록 지정하지 않은 경우에는 모든 입력 행이 사용 가능한 모든 출력으로 전송됩니다.All input rows are directed to all available outputs unless you indicate that you intend to redirect each row to one output or the other. 출력의 ExclusionGroup 속성에 0이 아닌 정수 값을 지정하면 행을 리디렉션하도록 지정할 수 있습니다.You indicate that you intend to redirect rows by specifying a non-zero integer value for the ExclusionGroup property on the outputs. 출력을 식별하기 위해 ExclusionGroup 에 입력하는 특정 정수 값은 중요하지 않지만 지정한 출력 그룹에는 일관되게 동일한 정수를 사용해야 합니다.The specific integer value entered in ExclusionGroup to identify the outputs is not significant, but you must use the same integer consistently for the specified group of outputs.

    注意

    모든 행을 출력하지 않으려는 경우 단일 출력과 함께 0이 아닌 ExclusionGroup 속성 값을 사용할 수도 있습니다.You can also use a non-zero ExclusionGroup property value with a single output when you do not want to output all rows. 그러나 이 경우 출력으로 보낼 각 행에 대해 DirectRowTo<outputbuffer> 메서드를 명시적으로 호출해야 합니다.However, in this case, you must explicitly call the DirectRowTo<outputbuffer> method for each row that you want to send to the output.

  • 입력 및 출력에 보다 알기 쉬운 이름을 지정할 수 있습니다.Assign a more descriptive name to the input and outputs. 스크립트 구성 요소에서는 이러한 이름을 사용하여 스크립트에서 입력 및 출력을 참조하는 데 사용할 형식화된 접근자 속성을 생성합니다.The Script component uses these names to generate the typed accessor properties that you will use to refer to the input and outputs in your script.

  • 동기 변환의 경우 열을 현재 상태로 둘 수 있습니다.Leave columns as is for synchronous transformations. 일반적으로 동기 변환에서는 데이터 흐름에 열을 추가하지 않습니다.Typically a synchronous transformation does not add columns to the data flow. 데이터는 버퍼의 현재 위치에서 수정되고 해당 버퍼는 데이터 흐름의 다음 구성 요소로 전달됩니다.Data is modified in place in the buffer, and the buffer is passed on to the next component in the data flow. 이 경우 변환의 출력에서 출력 열을 명시적으로 추가하거나 구성할 필요가 없습니다.If this is the case, you do not have to add and configure output columns explicitly on the transformation's outputs. 출력은 편집기에서 명시적으로 정의된 열이 없는 상태로 나타납니다.The outputs appear in the editor without any explicitly defined columns.

  • 행 수준 오류에 대한 시뮬레이션된 오류 출력에 새 열을 추가할 수 있습니다.Add new columns to simulated error outputs for row-level errors. 일반적으로 동일한 ExclusionGroup 의 여러 출력에는 동일한 출력 열 집합이 있습니다.Ordinarily multiple outputs in the same ExclusionGroup have the same set of output columns. 그러나 시뮬레이션된 오류 출력을 만드는 경우 오류 정보를 포함할 다른 열을 추가할 수 있습니다.However, if you are creating a simulated error output, you may want to add more columns to contain error information. 데이터 흐름 엔진에서 오류 행을 처리하는 방법은 데이터 흐름 구성 요소에서 오류 출력 사용을 참조하세요.For information about how the data flow engine processes error rows, see Using Error Outputs in a Data Flow Component. 스크립트 구성 요소에서는 개발자가 직접 코드를 작성하여 추가 열을 적절한 오류 정보로 채워야 합니다.Note that in the Script component you must write your own code to fill the additional columns with appropriate error information. 자세한 내용은 스크립트 구성 요소의 오류 출력 시뮬레이션을 참조하세요.For more information, see Simulating an Error Output for the Script Component.

스크립트 변환 편집기입/출력 페이지에 대한 자세한 내용은 스크립트 변환 편집기(입/출력 페이지)를 참조하세요.For more information about the Inputs and Outputs page of the Script Transformation Editor, see Script Transformation Editor (Inputs and Outputs Page).

변수 추가Adding Variables

스크립트에서 기존 변수를 사용하려는 경우 스크립트 변환 편집기스크립트 페이지에 있는 ReadOnlyVariablesReadWriteVariables 속성 필드에서 해당 변수를 추가할 수 있습니다.If you want to use existing variables in your script, you can add them in the ReadOnlyVariables and ReadWriteVariables property fields on the Script page of the Script Transformation Editor.

속성 필드에 여러 변수를 추가하는 경우 변수 이름을 쉼표로 구분하십시오.When you add multiple variables in the property fields, separate the variable names by commas. 또한 ReadOnlyVariablesReadWriteVariables 속성 필드 옆에 있는 줄임표( ... ) 단추를 클릭한 다음, 변수 선택 대화 상자에서 변수를 선택하면 여러 개의 변수를 선택할 수 있습니다.You can also select multiple variables by clicking the ellipsis (...) button next to the ReadOnlyVariables and ReadWriteVariables property fields, and then selecting the variables in the Select variables dialog box.

스크립트 구성 요소에서 변수를 사용하는 방법에 대한 일반적인 내용은 스크립트 구성 요소에서 변수 사용을 참조하세요.For general information about how to use variables with the Script component, see Using Variables in the Script Component.

스크립트 변환 편집기스크립트 페이지에 대한 자세한 내용은 스크립트 변환 편집기(스크립트 페이지)를 참조하세요.For more information about the Script page of the Script Transformation Editor, see Script Transformation Editor (Script Page).

코드 디자인 모드에서 동기 변환 구성 요소 스크립팅Scripting a Synchronous Transformation Component in Code-Design Mode

구성 요소에 대한 메타데이터를 구성한 후에는 사용자 지정 스크립트를 작성할 수 있습니다.After you have configured the metadata for your component, you can write your custom script. 스크립트 변환 편집기스크립트 페이지에서 스크립트 편집 을 클릭하여 사용자 지정 스크립트를 추가할 수 있는 MicrosoftMicrosoft VSTA(Visual StudioVisual Studio Tools for Applications) IDE를 엽니다.In the Script Transformation Editor, on the Script page, click Edit Script to open the MicrosoftMicrosoft Visual StudioVisual Studio Tools for Applications (VSTA) IDE where you can add your custom script. 사용하는 스크립트 언어는 스크립트 페이지에서 ScriptLanguage 속성에 대한 스크립트 언어로 MicrosoftMicrosoft Visual Basic 또는 MicrosoftMicrosoft Visual C# 중에서 선택한 언어에 따라 달라집니다.The scripting language that you use depends on whether you selected MicrosoftMicrosoft Visual Basic or MicrosoftMicrosoft Visual C# as the script language for the ScriptLanguage property on the Script page.

스크립트 구성 요소를 사용하여 만든 모든 종류의 구성 요소에 적용되는 중요한 정보는 스크립트 구성 요소 코딩 및 디버깅을 참조하세요.For important information that applies to all kinds of components created by using the Script component, see Coding and Debugging the Script Component.

자동 생성 코드 이해Understanding the Auto-generated Code

변환 구성 요소를 만들고 구성한 후 VSTA IDE를 열면 편집 가능한 ScriptMain 클래스가 ProcessInputRow 메서드에 대한 스텁과 함께 코드 편집기에 나타납니다.When you open the VSTA IDE after you create and configuring a transformation component, the editable ScriptMain class appears in the code editor with a stub for the ProcessInputRow method. ScriptMain 클래스에서 사용자 지정 코드를 작성해야 하며 ProcessInputRow 는 변환 구성 요소에서 가장 중요한 메서드입니다.The ScriptMain class is where you will write your custom code, and ProcessInputRow is the most important method in a transformation component.

VSTA에서 프로젝트 탐색기 창을 열면 스크립트 구성 요소에서 읽기 전용 BufferWrapperComponentWrapper 프로젝트 항목도 생성했음을 확인할 수 있습니다.If you open the Project Explorer window in VSTA, you can see that the Script component has also generated read-only BufferWrapper and ComponentWrapper project items. ScriptMain 클래스는 ComponentWrapper 프로젝트 항목의 UserComponent 클래스에서 상속됩니다.The ScriptMain class inherits from the UserComponent class in the ComponentWrapper project item.

런타임에 데이터 흐름 엔진에서 ScriptComponent 부모 클래스의 ProcessInput 메서드를 재정의하는 UserComponent 클래스의 ProcessInput 메서드를 호출합니다.At run time, the data flow engine invokes the ProcessInput method in the UserComponent class, which overrides the ProcessInput method of the ScriptComponent parent class. 그러면 ProcessInput 메서드에서 입력 버퍼의 행을 반복하고 각 행에 대해 ProcessInputRow 메서드를 한 번씩 호출합니다.The ProcessInput method in turn loops through the rows in the input buffer and calls the ProcessInputRow method one time for each row.

사용자 지정 코드 작성Writing Your Custom Code

동기 출력을 사용하는 변환 구성 요소는 모든 데이터 흐름 구성 요소 중에서 작성하기가 가장 간단합니다.A transformation component with synchronous outputs is the simplest of all data flow components to write. 예를 들어 이 항목의 뒷부분에 있는 단일 출력 예는 다음과 같은 사용자 지정 코드로 구성되어 있습니다.For example, the single-output example shown later in this topic consists of the following custom code:

Row.City = UCase(Row.City)  
Row.City = (Row.City).ToUpper();  
  

사용자 지정 동기 변환 구성 요소 만들기를 마치려면 재정의된 ProcessInputRow 메서드를 사용하여 입력 버퍼의 각 행에 있는 데이터를 변환합니다.To finish creating a custom synchronous transformation component, you use the overridden ProcessInputRow method to transform the data in each row of the input buffer. 데이터 흐름 엔진에서는 이 버퍼가 가득 차면 데이터 흐름의 다음 구성 요소로 버퍼를 전달합니다.The data flow engine passes this buffer, when full, to the next component in the data flow.

요구 사항에 따라 ScriptMain 클래스에서 사용할 수 있는 PreExecutePostExecute 메서드에서 스크립트를 작성하여 예비 또는 최종 처리를 수행할 수도 있습니다.Depending on your requirements, you may also want to write script in the PreExecute and PostExecute methods, available in the ScriptMain class, to perform preliminary or final processing.

여러 출력 작업Working with Multiple Outputs

입력 행을 둘 이상의 가능한 출력 중 하나로 전송하는 데 필요한 사용자 지정 코드는 앞에서 설명한 단일 출력을 사용하는 경우보다 그다지 많지 않습니다.Directing input rows to one of two or more possible outputs does not require much more custom code than the single-output scenario discussed earlier. 예를 들어 이 항목의 뒷부분에 있는 두 개의 출력을 사용하는 예는 다음과 같은 사용자 지정 코드로 구성되어 있습니다.For example, the two-output example shown later in this topic consists of the following custom code:

Row.City = UCase(Row.City)  
If Row.City = "REDMOND" Then  
    Row.DirectRowToMyRedmondAddresses()  
Else  
    Row.DirectRowToMyOtherAddresses()  
End If  
Row.City = (Row.City).ToUpper();  
  
if (Row.City=="REDMOND")  
{  
    Row.DirectRowToMyRedmondAddresses();  
}  
else  
{  
    Row.DirectRowToMyOtherAddresses();  
}  

이 예에서 스크립트 구성 요소는 개발자가 구성한 출력의 이름을 따라 DirectRowTo<OutputBufferX> 메서드를 자동으로 생성합니다.In this example, the Script component generates the DirectRowTo<OutputBufferX> methods for you, based on the names of the outputs that you configured. 비슷한 코드를 사용하여 오류 출력을 시뮬레이션된 오류 출력으로 전송할 수 있습니다.You can use similar code to direct error rows to a simulated error output.

Examples

이 예에서는 ScriptMain 클래스에서 동기 변환 구성 요소를 만드는 데 필요한 사용자 지정 코드를 보여 줍니다.The examples here demonstrate the custom code that is required in the ScriptMain class to create a synchronous transformation component.

注意

이 예에서는 AdventureWorks 예제 데이터베이스의 Person.Address 테이블을 사용하고 이 테이블의 첫 번째 열과 네 번째 열, intAddressIDnvarchar(30)City 를 데이터 흐름을 통해 전달합니다.These examples use the Person.Address table in the AdventureWorks sample database and pass its first and fourth columns, the intAddressID and nvarchar(30)City columns, through the data flow. 이 섹션의 원본, 변환 및 대상 예제에는 동일한 데이터가 사용됩니다.The same data is used in the source, transformation, and destination samples in this section. 각 예에 대해 필수 구성 요소 및 가정도 설명되어 있습니다.Additional prerequisites and assumptions are documented for each example.

단일 출력 동기 변환 예Single Output Synchronous Transformation Example

이 예에서는 단일 출력을 사용하는 동기 변환 구성 요소를 보여 줍니다.This example demonstrates a synchronous transformation component with a single output. 이 변환에서는 AddressID 열을 전달하고 City 열을 대문자로 변환합니다.This transformation passes through the AddressID column and converts the City column to uppercase.

이 예제 코드를 실행하려면 다음과 같이 패키지와 구성 요소를 구성해야 합니다.If you want to run this sample code, you must configure the package and the component as follows:

  1. 데이터 흐름 디자이너 화면에 새 스크립트 구성 요소를 추가하고 이 구성 요소를 변환으로 구성합니다.Add a new Script component to the Data Flow designer surface and configure it as a transformation.

  2. SSISSSIS 디자이너에서 원본 또는 다른 변환의 출력을 새 변환 구성 요소에 연결합니다.Connect the output of a source or of another transformation to the new transformation component in SSISSSIS Designer. 이 출력은 AdventureWorks 예제 데이터베이스의 Person.Address 테이블에서 AddressIDCity 열이 포함된 데이터를 제공해야 합니다.This output should provide data from the Person.Address table of the AdventureWorks sample database that contains the AddressID and City columns.

  3. 스크립트 변환 편집기 를 엽니다.Open the Script Transformation Editor. 입력 열 페이지에서 AddressIDCity 열을 선택합니다.On the Input Columns page, select the AddressID and City columns. City 열을 읽기/쓰기로 표시합니다.Mark the City column as Read/Write.

  4. 입/출력 페이지에서 입력 및 출력의 이름을 MyAddressInputMyAddressOutput 과 같이 보다 알기 쉬운 이름으로 바꿉니다.On the Inputs and Outputs page, rename the input and output with more descriptive names, such as MyAddressInput and MyAddressOutput. 출력의 SynchronousInputID 는 입력의 ID 에 해당합니다.Notice that the SynchronousInputID of the output corresponds to the ID of the input. 따라서 출력 열을 추가하고 구성하지 않아도 됩니다.Therefore you do not have to add and configure output columns.

  5. 스크립트 페이지에서 스크립트 편집 을 클릭하고 다음 스크립트를 입력합니다.On the Script page, click Edit Script and enter the script that follows. 그런 다음 스크립트 개발 환경 및 스크립트 변환 편집기 를 닫습니다.Then close the script development environment and the Script Transformation Editor.

  6. SQL ServerSQL Server 대상이나 스크립트 구성 요소를 사용하여 대상 만들기에서 보여 준 예제 대상 구성 요소와 같이 AddressIDCity 열을 필요로 하는 대상 구성 요소를 만들고 구성합니다.Create and configure a destination component that expects the AddressID and City columns, such as a SQL ServerSQL Server destination, or the sample destination component demonstrated in Creating a Destination with the Script Component. 그런 다음 변환의 출력을 대상 구성 요소에 연결합니다.Then connect the output of the transformation to the destination component. AdventureWorks 데이터베이스에서 다음 Transact-SQLTransact-SQL 명령을 실행하여 대상 테이블을 만들 수 있습니다.You can create a destination table by running the following Transact-SQLTransact-SQL command in the AdventureWorks database:

    CREATE TABLE [Person].[Address2]([AddressID] [int] NOT NULL,  
        [City] [nvarchar](30) NOT NULL)  
    
  7. 예제를 실행합니다.Run the sample.

Public Class ScriptMain  
    Inherits UserComponent  
  
    Public Overrides Sub MyAddressInput_ProcessInputRow(ByVal Row As MyAddressInputBuffer)  
  
        Row.City = UCase(Row.City)  
  
    End Sub  
  
End Class  
public class ScriptMain:  
    UserComponent  
  
{  
    public override void MyAddressInput_ProcessInputRow(MyAddressInputBuffer Row)  
    {  
  
        Row.City = (Row.City).ToUpper();  
  
    }  
  
}  

두 개의 출력을 사용하는 동기 변환 예Two-Output Synchronous Transformation Example

이 예에서는 두 개의 출력을 사용하는 동기 변환 구성 요소를 보여 줍니다.This example demonstrates a synchronous transformation component with two outputs. 이 변환에서는 AddressID 열을 전달하고 City 열을 대문자로 변환합니다.This transformation passes through the AddressID column and converts the City column to uppercase. 도시 이름이 Redmond이면 해당 행은 한 출력으로 전송되고 다른 모든 행은 다른 출력으로 전송됩니다.If the city name is Redmond, it directs the row to one output; it directs all other rows to another output.

이 예제 코드를 실행하려면 다음과 같이 패키지와 구성 요소를 구성해야 합니다.If you want to run this sample code, you must configure the package and the component as follows:

  1. 데이터 흐름 디자이너 화면에 새 스크립트 구성 요소를 추가하고 이 구성 요소를 변환으로 구성합니다.Add a new Script component to the Data Flow designer surface and configure it as a transformation.

  2. SSISSSIS 디자이너에서 원본 또는 다른 변환의 출력을 새 변환 구성 요소에 연결합니다.Connect the output of a source or of another transformation to the new transformation component in SSISSSIS Designer. 이 출력은 AdventureWorks 샘플 데이터베이스에 있는 Person.Address 테이블의 데이터를 제공해야 하며, 이 데이터에는 적어도 AddressIDCity 열이 포함됩니다.This output should provide data from the Person.Address table of the AdventureWorks sample database that contains at least the AddressID and City columns.

  3. 스크립트 변환 편집기 를 엽니다.Open the Script Transformation Editor. 입력 열 페이지에서 AddressIDCity 열을 선택합니다.On the Input Columns page, select the AddressID and City columns. City 열을 읽기/쓰기로 표시합니다.Mark the City column as Read/Write.

  4. 입/출력 페이지에서 두 번째 출력을 만듭니다.On the Inputs and Outputs page, create a second output. 새 출력을 추가한 후에는 해당 SynchronousInputID 를 입력의 ID 로 설정해야 합니다.After you add the new output, make sure that you set its SynchronousInputID to the ID of the input. 기본적으로 만들어진 첫 번째 출력에는 이 속성이 이미 설정되어 있습니다.This property is already set on the first output, which is created by default. 상호 배타적인 두 개의 출력 간에 입력 행을 분리하려면 각 출력에 대해 ExclusionGroup 속성을 0이 아닌 동일한 값으로 설정합니다.For each output, set the ExclusionGroup property to the same non-zero value to indicate that you will split the input rows between two mutually exclusive outputs. 출력에 출력 열을 추가할 필요는 없습니다.You do not have to add any output columns to the outputs.

  5. 입력 및 출력 이름을 MyAddressInput, MyRedmondAddressesMyOtherAddresses 와 같이 보다 알기 쉬운 이름으로 바꿉니다.Rename the input and outputs with more descriptive names, such as MyAddressInput, MyRedmondAddresses, and MyOtherAddresses.

  6. 스크립트 페이지에서 스크립트 편집 을 클릭하고 다음 스크립트를 입력합니다.On the Script page, click Edit Script and enter the script that follows. 그런 다음 스크립트 개발 환경 및 스크립트 변환 편집기 를 닫습니다.Then close the script development environment and the Script Transformation Editor.

  7. SQL ServerSQL Server 대상, 플랫 파일 대상 또는 스크립트 구성 요소를 사용하여 대상 만들기에서 보여 준 예제 대상 구성 요소와 같이 AddressIDCity 열을 필요로 하는 두 개의 대상 구성 요소를 만들고 구성합니다.Create and configure two destination components that expect the AddressID and City columns, such as a SQL ServerSQL Server destination, a Flat File destination, or the sample destination component demonstrated in Creating a Destination with the Script Component. 그런 다음 변환의 각 출력을 대상 구성 요소 중 하나에 연결합니다.Then connect each of the outputs of the transformation to one of the destination components. AdventureWorks 데이터베이스에서 다음과 같이 고유한 테이블 이름으로 Transact-SQLTransact-SQL 명령을 실행하여 대상 테이블을 만들 수 있습니다.You can create destination tables by running a Transact-SQLTransact-SQL command similar to the following (with unique table names) in the AdventureWorks database:

    CREATE TABLE [Person].[Address2](  
        [AddressID] [int] NOT NULL,  
        [City] [nvarchar](30) NOT NULL  
    
  8. 예제를 실행합니다.Run the sample.

Public Class ScriptMain  
    Inherits UserComponent  
  
    Public Overrides Sub MyAddressInput_ProcessInputRow(ByVal Row As MyAddressInputBuffer)  
  
        Row.City = UCase(Row.City)  
  
        If Row.City = "REDMOND" Then  
            Row.DirectRowToMyRedmondAddresses()  
        Else  
            Row.DirectRowToMyOtherAddresses()  
        End If  
  
    End Sub  
  
End Class  
public class ScriptMain:  
    UserComponent  
  
public override void MyAddressInput_ProcessInputRow(MyAddressInputBuffer Row)  
    {  
  
        Row.City = (Row.City).ToUpper();  
  
        if (Row.City == "REDMOND")  
        {  
            Row.DirectRowToMyRedmondAddresses();  
        }  
        else  
        {  
            Row.DirectRowToMyOtherAddresses();  
        }  
  
    }  
}  

참고 항목See Also

동기 및 비동기 변환 이해Understanding Synchronous and Asynchronous Transformations
스크립트 구성 요소를 사용하여 비동기 변환 만들기Creating an Asynchronous Transformation with the Script Component
동기 출력을 사용하여 사용자 지정 변환 구성 요소 개발Developing a Custom Transformation Component with Synchronous Outputs