레코드 집합 대상 사용

적용 대상: Azure Data Factory의 SQL Server SSIS Integration Runtime

레코드 집합 대상은 외부 데이터 원본에 데이터를 저장하지 않습니다. 대신 레코드 집합 대상은 Object 데이터 형식의 Integrated Services 패키지 변수에 저장된 레코드 집합의 데이터를 메모리에 저장합니다. 레코드 집합 대상이 데이터를 저장한 후에는 일반적으로 Foreach 루프 컨테이너를 Foreach ADO 열거자와 함께 사용하여 레코드 집합의 행을 한 번에 하나씩 처리합니다. Foreach ADO 열거자는 현재 행의 각 열에 있는 값을 별도의 패키지 변수에 저장합니다. 그런 다음 Foreach 루프 컨테이너 내에서 구성하는 작업은 변수에서 해당 값을 읽고 일부 작업을 수행합니다.

다양한 시나리오에서 레코드 집합 대상을 사용할 수 있습니다. 다음 몇 가지 예를 참조하세요.

  • 메일 보내기 작업과 Integrated Services 식 언어를 사용하여 레코드 집합의 각 행에 대해 사용자 지정 전자 메일 메시지를 보낼 수 있습니다.

  • 데이터 흐름 태스크 내에서 원본으로 구성된 스크립트 구성 요소를 사용하여 열 값을 데이터 흐름의 열로 읽을 수 있습니다. 그런 다음 변환 및 대상을 사용하여 행을 변환하고 저장할 수 있습니다. 이 예제에서는 데이터 흐름 태스크가 각 행에 대해 한 번씩 실행됩니다.

다음 섹션에서는 먼저 레코드 집합 대상을 사용하는 일반적인 프로세스에 대해 설명한 다음 대상을 사용하는 방법에 대한 예를 보여 줍니다.

레코드 집합 대상을 사용하는 일반적인 단계

다음 절차에서는 레코드 집합 대상에 데이터를 저장한 다음 Foreach 루프 컨테이너를 사용하여 각 행을 처리하는 데 필요한 단계를 요약합니다.

Foreach 루프 컨테이너를 사용하여 레코드 집합 대상에 데이터를 저장하고 각 행을 처리하려면

  1. SSDT(SQL Server Data Tools)에서 Integration Services 패키지를 만들거나 엽니다.

  2. 레코드 집합 대상이 메모리에 저장한 레코드 집합을 보유할 변수를 만든 다음 이 변수의 유형을 Object로 설정합니다.

  3. 사용하려는 레코드 집합에 있는 각 열의 값을 포함할 적절한 형식의 추가 변수를 만듭니다.

  4. 데이터 흐름에서 사용하려는 데이터 원본에 필요한 연결 관리자를 추가하고 구성합니다.

  5. 패키지에 데이터 흐름 작업을 추가하고 SSIS 디자이너의 데이터 흐름 탭에서 데이터를 로드하고 변환할 원본과 변환을 구성합니다.

  6. 데이터 흐름에 레코드 집합 대상을 추가하고 변환에 연결합니다. Recordset 대상의 VariableName 속성에 대해 레코드 집합을 보관하기 위해 만든 변수의 이름을 입력합니다.

  7. SSIS 디자이너의 제어 흐름 탭에서 Foreach 루프 컨테이너를 추가하고 이 컨테이너를 데이터 흐름 작업 뒤에 연결합니다. 그런 다음 Foreach 루프 편집기를 열어 다음 설정으로 컨테이너를 구성합니다.

    1. 컬렉션 페이지에서 Foreach ADO 열거자를 선택합니다. 그런 다음 ADO 개체 원본 변수의 경우 레코드 집합이 포함된 변수를 선택합니다.

    2. 변수 매핑 페이지에서 사용하려는 각 열의 인덱스(0부터 시작하는 인덱스)를 적절한 변수에 매핑합니다.

      루프의 각 반복에서 열거자는 이러한 변수를 현재 행의 열 값으로 채웁니다.

  8. Foreach 루프 컨테이너 내에서 변수의 값을 읽어 레코드 집합의 한 행을 처리하는 작업을 추가하고 구성합니다.

레코드 집합 대상 사용 예제

다음 예제에서 데이터 흐름 태스크는 Sales.SalesPerson 테이블에서 Recordset 대상으로 AdventureWorks2022 직원에 대한 정보를 로드합니다. 그런 다음 Foreach 루프 컨테이너는 한 번에 한 행의 데이터를 읽고 메일 보내기 작업을 호출합니다. 메일 보내기 작업은 식을 사용하여 각 영업 사원에게 보너스 금액에 대한 사용자 지정된 전자 메일 메시지를 보냅니다.

프로젝트를 만들고 변수를 구성하려면

  1. SQL Server Data Tools에서 새 Integration Services 프로젝트를 만듭니다.

  2. SSIS 메뉴에서 변수를 선택합니다.

  3. 변수 창에서 다음과 같이 레코드 집합과 현재 행의 열 값을 보유할 변수를 만듭니다.

    1. BonusRecordset이라는 변수를 만들고 해당 형식을 Object설정합니다.

      BonusRecordset 변수는 레코드 집합을 보유합니다.

    2. EmailAddress라는 변수를 만들고 해당 형식을 String으로 설정합니다.

      EmailAddress 변수는 영업 사원의 전자 메일 주소를 보유합니다.

    3. FirstName이라는 변수를 만들고 해당 형식을 String으로 설정합니다.

      FirstName 변수는 영업 사원의 이름을 보유합니다.

    4. Bonus라는 변수를 만들고 해당 형식을 Double으로 설정합니다.

      보너스 변수는 영업 사원의 보너스 금액을 보유합니다.

연결 관리자를 구성하려면

  1. SSIS 디자이너의 연결 관리자 영역에서 AdventureWorks2022 샘플 데이터베이스에 연결하는 새 OLE DB 연결 관리자를 추가하고 구성합니다.

    데이터 흐름 태스크의 OLE DB 원본은 이 연결 관리자를 사용하여 데이터를 검색합니다.

  2. 연결 관리자 영역에서 사용 가능한 SMTP 서버에 연결하는 새 SMTP 연결 관리자를 추가하고 구성합니다.

    Foreach 루프 컨테이너 내의 메일 보내기 태스크는 이 연결 관리자를 사용하여 전자 메일을 보냅니다.

데이터 흐름 및 레코드 집합 대상을 구성하려면

  1. SSIS 디자이너의 제어 흐름 탭에서 디자인 화면에 데이터 흐름 작업을 추가합니다.

  2. 데이터 흐름 탭에서 데이터 흐름 태스크에 OLE DB 원본을 추가한 다음, OLE DB 원본 편집기를 엽니다.

  3. 편집기의 연결 관리자 페이지에서 다음 설정을 사용하여 원본을 구성합니다.

    1. OLE DB 연결 관리자의 경우 이전에 만든 OLE DB 연결 관리자를 선택합니다.

    2. 데이터 액세스 모드의 경우 SQL 명령을 선택합니다.

    3. SQL 명령 텍스트의 경우 다음 쿼리를 입력합니다.

      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로 변환해야 합니다.

  4. 데이터 흐름 탭에서 레코드 집합 대상을 추가하고 OLE DB 원본 뒤의 대상을 연결합니다.

  5. 레코드 집합 대상 편집기를 열고 다음과 같이 대상을 구성합니다.

    1. 구성 요소 속성 탭에서 VariableName 속성에 대해 User::BonusRecordset을 선택합니다.

    2. 입력 열 탭에서 사용 가능한 열 세 개를 모두 선택합니다.

Foreach 루프 컨테이너를 구성하고 패키지를 실행하려면

  1. SSIS 디자이너의 제어 흐름 탭에서 Foreach 루프 컨테이너를 추가하고 이 컨테이너를 데이터 흐름 작업 뒤에 연결합니다.

  2. Foreach 루프 편집기를 열고 다음 설정을 사용하여 컨테이너를 구성합니다.

    1. 컬렉션 페이지에서 열거자에 대해 Foreach ADO 열거자를 선택하고 ADO 개체 원본 변수에 대해 User::BonusRecordset를 선택합니다.

    2. 변수 매핑 페이지에서 User::EmailAddress를 인덱스 0에 매핑하고, User::FirstName을 인덱스 1에 매핑하고, User::Bonus를 인덱스 2에 매핑합니다.

  3. 제어 흐름 탭의 Foreach 루프 컨테이너 내에서 메일 보내기 작업을 추가합니다.

  4. 메일 보내기 태스크 편집기를 연 다음 메일 페이지에서 다음 설정을 사용하여 작업을 구성합니다.

    1. SmtpConnection에 대해 이전에 구성한 SMTP 연결 관리자를 선택합니다.

    2. 보낸 사람에 대해 적절한 전자 메일 주소를 입력합니다.

      고유한 전자 메일 주소를 사용하는 경우 패키지가 성공적으로 실행되는지 확인할 수 있습니다. AdventureWorks2022의 가상 영업 사원에게 메일 보내기 태스크에서 보낸 메시지에 대해 배달할 수 없는 영수증을 받게 됩니다.

    3. 받는 이의 경우 기본 전자 메일 주소를 입력합니다.

      이 값은 사용되지 않지만 런타임에 각 판매 직원의 전자 메일 주소로 대체됩니다.

    4. 제목에 "연간 보너스"를 입력합니다.

    5. MessageSourceType에 대해 직접 입력을 선택합니다.

  5. 메일 보내기 태스크 편집기의 페이지에서 줄임표 단추(...)를 클릭하여 속성 식 편집기를 엽니다.

  6. 속성 식 편집기에서 다음 정보를 입력합니다.

    1. ToLine에 대해 다음 식을 추가합니다.

      @[User::EmailAddress]  
      
    2. MessageSource 속성에 대해 다음 식을 추가합니다.

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

    유효한 SMTP 서버를 지정하고 고유한 전자 메일 주소를 제공한 경우 Mail 보내기 태스크가 AdventureWorks2022의 가상 영업 사원에게 보내는 메시지에 대해 배달할 수 없는 영수증을 받게 됩니다.