레코드 집합 대상 사용Use a Recordset Destination

레코드 집합 대상은 외부 데이터 원본에 데이터를 저장하지 않습니다.The Recordset destination does not save data to an external data source. 대신 레코드 집합 대상은 Integration ServicesIntegration Services Object 데이터 형식의 패키지 변수에 저장된 레코드 집합의 데이터를 메모리에 저장합니다.Instead, the Recordset destination saves data in memory in a recordset that is stored in an Integration ServicesIntegration Services package variable of the Object data type. 레코드 집합 대상이 데이터를 저장한 후에는 일반적으로 Foreach 루프 컨테이너를 Foreach ADO 열거자와 함께 사용하여 레코드 집합의 행을 한 번에 하나씩 처리합니다.After the Recordset destination saves the data, you typically use a Foreach Loop container with the Foreach ADO enumerator to process one row of the recordset at a time. Foreach ADO 열거자는 현재 행의 각 열 값을 개별 패키지 변수에 저장합니다.The Foreach ADO enumerator saves the value from each column of the current row into a separate package variable. 그러면 Foreach 루프 컨테이너 내에 구성한 태스크가 변수에서 이러한 값을 읽어 와서 이를 가지고 몇 가지 동작을 수행합니다.Then, the tasks that you configure inside the Foreach Loop container read those values from the variables and perform some action with them.

레코드 집합 대상은 다양한 시나리오에서 사용할 수 있습니다.You can use the Recordset destination in many different scenarios. 다음은 몇 가지 예입니다.Here are some examples:

  • 메일 보내기 태스크와 Integration ServicesIntegration Services 식 언어를 사용하여 레코드 집합의 각 행에 대해 사용자 지정 전자 메일 메시지를 보낼 수 있습니다.You can use a Send Mail task and the Integration ServicesIntegration Services expression language to send a customized e-mail message for each row in the recordset.

  • 데이터 흐름 태스크 내에서 원본으로 구성된 스크립트 구성 요소를 사용하여 열 값을 데이터 흐름의 열로 읽어올 수 있습니다.You can use a Script component configured as a source, inside a Data Flow task, to read the column values into the columns of the data flow. 그런 다음 변환 및 대상을 사용하여 행을 변환하고 저장할 수 있습니다.Then, you can use transformations and destinations to transform and save the row. 이 예에서는 데이터 흐름 태스크가 각 행에 대해 한 번씩 실행됩니다.In this example, the Data Flow task runs once for each row.

    다음 섹션에서는 먼저 레코드 집합 대상을 사용하는 일반적인 프로세스에 대해 설명한 다음 대상을 사용하는 방법에 대한 예를 보여 줍니다.The following sections first describe the general process of using the Recordset destination and then show a specific example of how to use the destination.

레코드 집합 대상을 사용하는 일반적인 단계General Steps to Using a Recordset Destination

다음 절차에서는 레코드 집합 대상에 데이터를 저장한 다음 Foreach 루프 컨테이너를 사용하여 각 행을 처리하는 데 필요한 단계를 요약합니다.The following procedure summarizes the steps that are required to save data to a Recordset destination, and then use the Foreach Loop container to process each row.

레코드 집합 대상에 데이터를 저장하고 Foreach 루프 컨테이너를 사용하여 각 행을 처리하려면To save data to a Recordset destination and process each row by using the Foreach Loop container

  1. SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT)에서 Integration ServicesIntegration Services 패키지를 만들거나 엽니다.In SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT), create or open an Integration ServicesIntegration Services package.

  2. 레코드 집합 대상이 메모리에 저장한 레코드 집합을 보유할 변수를 만든 다음 이 변수의 유형을 Object로 설정합니다.Create a variable that will contain the recordset saved into memory by the Recordset destination, and set the variable's type to Object.

  3. 사용할 레코드 집합의 각 열 값을 보유할 적절한 유형의 추가 변수를 만듭니다.Create additional variables of the appropriate types to contain the values of each column in the recordset that you want to use.

  4. 데이터 흐름에서 사용할 데이터 원본에 필요한 연결 관리자를 추가하고 구성합니다.Add and configure the connection manager required by the data source that you plan to use in your data flow.

  5. 패키지에 데이터 흐름 태스크를 추가하고 SSISSSIS 디자이너의 데이터 흐름 탭에서 데이터를 로드하고 변환할 원본과 변환을 구성합니다.Add a Data Flow task to the package, and on the Data Flow tab of SSISSSIS Designer, configure sources and transformations to load and transform the data.

  6. 데이터 집합 대상을 데이터 흐름에 추가하고 이를 변환에 연결합니다.Add a Recordset destination to the data flow and connect it to the transformations. 레코드 집합 대상의 VariableName 속성에 대해 레코드 집합을 보유하기 위해 만든 변수의 이름을 입력합니다.For the VariableName property of the Recordset destination, enter the name of the variable that you created to hold the recordset.

  7. SSISSSIS 디자이너의 제어 흐름 탭에서 Foreach 루프 컨테이너를 추가하고 이 컨테이너를 데이터 흐름 태스크 뒤에 연결합니다.On the Control Flow tab of SSISSSIS Designer, add a Foreach Loop container and connect this container after the Data Flow task. 그런 다음 Foreach 루프 편집기 를 열어 다음과 같이 컨테이너를 구성합니다.Then, open the Foreach Loop Editor to configure the container with the following settings:

    1. 컬렉션 페이지에서 Foreach ADO 열거자를 선택합니다.On the Collection page, select the Foreach ADO Enumerator. 그런 다음 ADO 개체 원본 변수에 대해 레코드 집합이 들어 있는 변수를 선택합니다.Then, for ADO object source variable, select the variable that contains the recordset.

    2. 변수 매핑 페이지에서 사용할 각 열의 0부터 시작하는 인덱스를 적절한 변수에 매핑합니다.On the Variable Mappings page, map the zero-based index of each column that you want to use to the appropriate variable.

      루프가 반복될 때마다 열거자는 현재 행의 열 값으로 이러한 변수를 채웁니다.On each iteration of the loop, the enumerator populates these variables with the column values from the current row.

  8. Foreach 루프 컨테이너 내에서 변수의 값을 읽어 와서 레코드 집합의 행을 한 번에 하나씩 처리하는 태스크를 추가하고 구성합니다.Inside the Foreach Loop container, add and configure tasks to process one row of the recordset at a time by reading the values from the variables.

레코드 집합 대상을 사용하는 예Example of Using the Recordset Destination

다음 예에서는 데이터 흐름 태스크가 AdventureWorks2012AdventureWorks2012 직원에 대한 정보를 Sales.SalesPerson 테이블에서 레코드 집합 대상으로 로드합니다.In the following example, the Data Flow task loads information about AdventureWorks2012AdventureWorks2012 employees from the Sales.SalesPerson table into a Recordset destination. 그러면 Foreach 루프 컨테이너에서 데이터 행을 한 번에 하나씩 읽고 메일 보내기 태스크를 호출합니다.Then, a Foreach Loop container reads one row of data at a time, and calls a Send Mail task. 메일 보내기 태스크는 식을 사용하여 보너스 금액에 관한 사용자 지정 전자 메일 메시지를 각 판매 직원에 보냅니다.The Send Mail task uses expressions to send a customized e-mail message to each salesperson about the amount of his or her bonus.

프로젝트를 만들고 변수를 구성하려면To create the project and configure the variables

  1. SQL Server Data ToolsSQL Server Data Tools에서 새 Integration ServicesIntegration Services 프로젝트를 만듭니다.In SQL Server Data ToolsSQL Server Data Tools, create a new Integration ServicesIntegration Services project.

  2. SSIS 메뉴에서 변수를 선택합니다.On the SSIS menu, select Variables.

  3. 변수 창에서 다음과 같이 레코드 집합과 현재 행의 열 값을 보유할 변수를 만듭니다.In the Variables window, create the variables that will hold the recordset and the column values from the current row:

    1. BonusRecordset이라는 변수를 만들고 이 변수의 유형을 Object로 설정합니다.Create a variable named, BonusRecordset, and set its type to Object.

      BonusRecordset 변수는 레코드 집합을 보유합니다.The BonusRecordset variable holds the recordset.

    2. EmailAddress이라는 변수를 만들고 이 변수의 유형을 String로 설정합니다.Create a variable named, EmailAddress, and set its type to String.

      EmailAddress 변수는 판매 직원의 메일 주소를 보유합니다.The EmailAddress variable holds the salesperson's e-mail address.

    3. FirstName이라는 변수를 만들고 이 변수의 유형을 String로 설정합니다.Create a variable named, FirstName, and set its type to String.

      FirstName 변수는 판매 직원의 이름을 보유합니다.The FirstName variable holds the salesperson's first name.

    4. Bonus이라는 변수를 만들고 이 변수의 유형을 Double로 설정합니다.Create a variable named, Bonus, and set its type to Double.

      Bonus 변수는 판매 직원의 보너스를 보유합니다.The Bonus variable holds the amount of the salesperson's bonus.

연결 관리자를 구성하려면To configure the connection managers

  1. SSISSSIS 디자이너의 연결 관리자 영역에서 AdventureWorks2012AdventureWorks2012 예제 데이터베이스에 연결하는 새 OLE DB 연결 관리자를 추가하고 구성합니다.In the Connection Managers area of the SSISSSIS Designer, add and configure a new OLE DB connection manager that connects to the AdventureWorks2012AdventureWorks2012 sample database.

    데이터 흐름 태스크의 OLE DB 원본은 이 연결 관리자를 사용하여 데이터를 검색합니다.The OLE DB source in the Data Flow task will use this connection manager to retrieve data.

  2. 연결 관리자 영역에서 사용 가능한 SMTP 서버에 연결하는 새 SMTP 연결 관리자를 추가하고 구성합니다.In the Connection Managers area, add and configure a new SMTP connection manager that connects to an available SMTP server.

    Foreach 루프 컨테이너 내의 메일 보내기 태스크는 이 연결 관리자를 사용하여 전자 메일을 보냅니다.The Send Mail task inside the Foreach Loop container will use this connection manager to send emails.

데이터 흐름 및 레코드 집합 대상을 구성하려면To configure the data flow and the Recordset Destination

  1. 디자이너의 제어 흐름 SSISSSIS 탭에서 디자인 화면에 데이터 흐름 태스크를 추가합니다.On the Control Flow tab of SSISSSIS Designer, add a Data Flow task to the design surface.

  2. 데이터 흐름 tab, add an OLE DB source to the 데이터 흐름 task, and then open the OLE DB 원본 편집기를 엽니다.On the Data Flow tab, add an OLE DB source to the Data Flow task, and then open the OLE DB Source Editor.

  3. OLE DB 원본 편집기의 연결 관리자 페이지에서 다음과 같이 원본을 구성합니다.On the Connection Manager page of the editor, configure the source with the following settings:

    1. OLE DB 연결 관리자에 대해 이전에 만든 OLE DB 연결 관리자를 선택합니다.For OLE DB connection manager, select the OLE DB connection manager that you previously created.

    2. 데이터 액세스 모드에 대해 SQL 명령을 선택합니다.For Data access mode, select SQL command.

    3. SQL 명령 텍스트에 대해 다음 쿼리를 입력합니다.For SQL command text, enter the following query:

      SELECT     Person.Contact.EmailAddress, Person.Contact.FirstName, CONVERT(float, Sales.SalesPerson.Bonus) AS Bonus  
      FROM         Sales.SalesPerson INNER JOIN  
                            Person.Contact ON Sales.SalesPerson.SalesPersonID = Person.Contact.ContactID  
      
      참고

      Bonus 열의 통화 값을 Double 형식의 패키지 변수에 로드하려면 먼저 이 값을 float로 변환해야 합니다.You have to convert the currency value in the Bonus column to a float before you can load that value into a package variable whose type is Double.

  4. 데이터 흐름 탭에서 레코드 집합 대상을 추가하고 이 대상을 OLE DB 원본 뒤에 연결합니다.On the Data Flow tab, add a Recordset destination, and connect the destination after the OLE DB source.

  5. 레코드 집합 대상 편집기를 열고 다음과 같이 대상을 구성합니다.Open the Recordset Destination Editor, and configure the destination with the following settings:

    1. 구성 요소 속성 탭에서 VariableName 속성에 대해 User::BonusRecordset을 선택합니다.On the Component Properties tab, for VariableName property, select User::BonusRecordset.

    2. 입력 열 탭에서 사용 가능한 열 세 개를 모두 선택합니다.On the Input Columns tab, select all three of the available columns.

Foreach 루프 컨테이너를 구성하고 패키지를 실행하려면To configure the Foreach Loop container and run the package

  1. 디자이너의 제어 흐름 SSISSSIS 탭에서 Foreach 루프 컨테이너를 추가하고 이 컨테이너를 데이터 흐름 태스크 뒤에 연결합니다.On the Control Flow tab of SSISSSIS Designer, add a Foreach Loop container, and connect the container after the Data Flow task.

  2. Foreach 루프 편집기를 열고 다음과 같이 컨테이너를 구성합니다.Open the Foreach Loop Editor, and configure the container with the following settings:

    1. 컬렉션 페이지에서 열거자에 대해 Foreach ADO 열거자를 선택하고 ADO 개체 원본 변수에 대해 User::BonusRecordset를 선택합니다.On the Collection page, for Enumerator, select Foreach ADO Enumerator, and for ADO object source variable, select User::BonusRecordset.

    2. 변수 매핑 페이지에서 User::EmailAddress 를 인덱스 0으로, User::FirstName 을 인덱스 1로, User::Bonus 를 인덱스 2로 매핑합니다.On the Variable Mappings page, map User::EmailAddress to index 0, User::FirstName to index 1, and User::Bonus to index 2.

  3. 제어 흐름 탭에서 Foreach 루프 컨테이너 내에 메일 보내기 태스크를 추가합니다.On the Control Flow tab, inside the Foreach Loop container, add a Send Mail task.

  4. 메일 보내기 태스크 편집기를 열고 메일 페이지에서 다음과 같이 태스크를 구성합니다.Open the Send Mail Task Editor, and then on the Mail page, configure the task with the following settings:

    1. SmtpConnection에 대해 이전에 구성한 SMTP 연결 관리자를 선택합니다.For SmtpConnection, select the SMTP connection manager that was configured previously.

    2. 보낸 사람에 대해 적절한 전자 메일 주소를 입력합니다.For From, enter an appropriate e-mail address.

      자신의 전자 메일 주소를 사용하면 패키지가 성공적으로 실행되는지 확인할 수 있습니다.If you use your own e-mail address, you will be able to confirm that the package runs successfully. 메일 보내기 태스크를 통해 AdventureWorks2012AdventureWorks2012의 가상 판매 직원에게 메시지를 보내면 해당 수신인에게 메시지를 배달할 수 없다는 내용의 메시지가 반환됩니다.You will receive undeliverable receipts for the messages sent by the Send Mail task to the fictitious salespersons of AdventureWorks2012AdventureWorks2012.

    3. 받는 사람에 대해 기본 전자 메일 주소를 입력합니다.For To, enter a default e-mail address.

      이 값은 사용되지 않지만 런타임에 각 판매 직원의 전자 메일 주소로 대체됩니다.This value will not be used, but will be replaced at run time by the e-mail address of each salesperson.

    4. 제목에 대해 "연간 보너스 안내"를 입력합니다.For Subject, enter "Your annual bonus".

    5. MessageSourceType에 대해 직접 입력을 선택합니다.For MessageSourceType, select Direct Input.

  5. 메일 보내기 태스크 편집기페이지에서 줄임표 단추(...)를 클릭하여 속성 식 편집기를 엽니다.On the Expressions page of the Send Mail Task Editor, click the ellipsis button (...) to open the Property Expressions Editor.

  6. 속성 식 편집기에서 다음 정보를 입력합니다.In the Property Expressions Editor, enter the following information:

    1. ToLine에 대해 다음 식을 추가합니다.For ToLine, add the following expression:

      @[User::EmailAddress]  
      
    2. MessageSource 속성에 대해 다음 식을 추가합니다.For the MessageSource property, add the following expression:

      "Dear " +  @[User::FirstName] + ": The amount of your bonus for this year is $" +  (DT_WSTR, 12) @[User::Bonus] + ". Thank you!"  
      
  7. 패키지를 실행합니다.Run the package.

    올바른 SMTP 서버를 지정하고 자신의 전자 메일 주소를 입력한 경우 메일 보내기 태스크를 통해 AdventureWorks2012AdventureWorks2012의 가상 판매 직원에게 메시지를 보내면 해당 수신인에게 메시지를 배달할 수 없다는 내용의 메시지가 반환됩니다.If you have specified a valid SMTP server and provided your own e-mail address, you will receive undeliverable receipts for the messages that the Send Mail task sends to the fictitious salespersons of AdventureWorks2012AdventureWorks2012.