레코드 집합 대상 사용하기
적용 대상: SQL Server Azure Data Factory의 SSIS Integration Runtime
레코드 집합 대상은 외부 데이터 원본에 데이터를 저장하지 않습니다. 대신 레코드 집합 대상은 Object 데이터 형식의 Integrated Services 패키지 변수에 저장된 레코드 집합의 데이터를 메모리에 저장합니다. 레코드 집합 대상이 데이터를 저장한 후에는 일반적으로 Foreach 루프 컨테이너를 Foreach ADO 열거자와 함께 사용하여 레코드 집합의 행을 한 번에 하나씩 처리합니다. Foreach ADO 열거자는 현재 행의 각 열에 있는 값을 별도의 패키지 변수에 저장합니다. 그런 다음 Foreach 루프 컨테이너 내에서 구성하는 작업은 변수에서 해당 값을 읽고 일부 작업을 수행합니다.
다양한 시나리오에서 레코드 집합 대상을 사용할 수 있습니다. 다음 몇 가지 예를 참조하세요.
메일 보내기 작업과 Integrated Services 식 언어를 사용하여 레코드 집합의 각 행에 대해 사용자 지정 전자 메일 메시지를 보낼 수 있습니다.
데이터 흐름 태스크 내에서 원본으로 구성된 스크립트 구성 요소를 사용하여 열 값을 데이터 흐름의 열로 읽을 수 있습니다. 그런 다음 변환 및 대상을 사용하여 행을 변환하고 저장할 수 있습니다. 이 예제에서는 데이터 흐름 태스크가 각 행에 대해 한 번씩 실행됩니다.
다음 섹션에서는 먼저 레코드 집합 대상을 사용하는 일반적인 프로세스에 대해 설명한 다음 대상을 사용하는 방법에 대한 예를 보여 줍니다.
레코드 집합 대상을 사용하는 일반적인 단계
다음 절차에서는 레코드 집합 대상에 데이터를 저장한 다음 Foreach 루프 컨테이너를 사용하여 각 행을 처리하는 데 필요한 단계를 요약합니다.
Foreach 루프 컨테이너를 사용하여 레코드 집합 대상에 데이터를 저장하고 각 행을 처리하려면
SSDT(SQL Server Data Tools)에서 Integration Services 패키지를 만들거나 엽니다.
레코드 집합 대상이 메모리에 저장한 레코드 집합을 보유할 변수를 만든 다음 이 변수의 유형을 Object로 설정합니다.
사용하려는 레코드 집합에 있는 각 열의 값을 포함할 적절한 형식의 추가 변수를 만듭니다.
데이터 흐름에서 사용하려는 데이터 원본에 필요한 연결 관리자를 추가하고 구성합니다.
패키지에 데이터 흐름 작업을 추가하고 SSIS 디자이너의 데이터 흐름 탭에서 데이터를 로드하고 변환할 원본과 변환을 구성합니다.
데이터 흐름에 레코드 집합 대상을 추가하고 변환에 연결합니다. Recordset 대상의 VariableName 속성에 대해 레코드 집합을 보관하기 위해 만든 변수의 이름을 입력합니다.
SSIS 디자이너의 제어 흐름 탭에서 Foreach 루프 컨테이너를 추가하고 이 컨테이너를 데이터 흐름 작업 뒤에 연결합니다. 그런 다음 Foreach 루프 편집기를 열어 다음 설정으로 컨테이너를 구성합니다.
컬렉션 페이지에서 Foreach File 열거자를 선택합니다. 그런 다음 ADO 개체 원본 변수의 경우 레코드 집합이 포함된 변수를 선택합니다.
변수 매핑 페이지에서 사용하려는 각 열의 인덱스(0부터 시작하는 인덱스)를 적절한 변수에 매핑합니다.
루프의 각 반복에서 열거자는 이러한 변수를 현재 행의 열 값으로 채웁니다.
Foreach 루프 컨테이너 내에서 변수의 값을 읽어 레코드 집합의 한 행을 처리하는 작업을 추가하고 구성합니다.
레코드 집합 대상 사용 예제
다음 예에서는 데이터 흐름 작업이 AdventureWorks2022 직원에 대한 정보를 Sales.SalesPerson 테이블에서 레코드 집합 대상으로 로드합니다. 그런 다음 Foreach 루프 컨테이너는 한 번에 한 행의 데이터를 읽고 메일 보내기 작업을 호출합니다. 메일 보내기 작업은 식을 사용하여 각 영업 사원에게 보너스 금액에 대한 사용자 지정된 전자 메일 메시지를 보냅니다.
프로젝트 생성 및 변수 구성하기
SQL Server Data Tools에서 새 Integration Services 프로젝트를 만듭니다.
SSIS 메뉴에서 변수를 선택합니다.
변수 창에서 다음과 같이 레코드 집합과 현재 행의 열 값을 보유할 변수를 만듭니다.
BonusRecordset이라는 변수를 만들고 해당 형식을 Object로 설정합니다.
BonusRecordset 변수는 레코드 집합을 보유합니다.
EmailAddress라는 변수를 만들고 해당 형식을 String으로 설정합니다.
EmailAddress 변수는영업 사원의 전자 메일 주소를 보유합니다.
FirstName이라는 변수를 만들고 해당 형식을 String으로 설정합니다.
FirstName 변수는 영업 사원의 이름을 갖습니다.
Bonus라는 변수를 만들고 해당 형식을 Double로 설정합니다.
Bonus 변수는 영업 사원의 보너스 금액을 갖습니다.
연결 관리자 구성 방법
SSIS 디자이너의 연결 관리자 영역에서 AdventureWorks2022 샘플 데이터베이스에 연결하는 새 OLE DB 연결 관리자를 추가하고 구성합니다.
데이터 흐름 태스크의 OLE DB 원본은 이 연결 관리자를 사용하여 데이터를 검색합니다.
연결 관리자 영역에서 사용 가능한 SMTP 서버에 연결하는 새 SMTP 연결 관리자를 추가하고 구성합니다.
Foreach 루프 컨테이너 내의 메일 보내기 태스크는 이 연결 관리자를 사용하여 전자 메일을 보냅니다.
데이터 흐름 및 레코드 집합 대상을 구성하는 방법
SSIS 디자이너의 제어 흐름 탭에서 디자인 화면에 데이터 흐름 작업을 추가합니다.
데이터 흐름 탭에서 데이터 흐름 태스크에 OLE DB 원본을 추가한 다음, OLE DB 원본 편집기를엽니다.
편집기의 연결 관리자 페이지에서 다음 설정을 사용하여 원본을 구성합니다.
OLE DB 연결 관리자의 경우 이전에 만든 OLE DB 연결 관리자를 선택합니다.
데이터 액세스 모드의 경우변수에서 SQL 명령을 선택합니다.
다음 명령을 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로 변환해야 합니다.
데이터 흐름 탭에서 레코드 집합 대상을 추가하고 OLE DB 원본 뒤의 대상을 연결합니다.
레코드 집합 대상 편집기를 열고 다음과 같이 대상을 구성합니다.
구성 요소 속성 탭에서 VariableName 속성에 대해User::BonusRecordset을 선택합니다.
입력 열 탭에서 사용 가능한 열 세 개를 모두 선택합니다.
Foreach 루프 컨테이너를 구성하고 패키지를 실행하는 방법
SSIS 디자이너의 제어 흐름 탭에서 Foreach 루프 컨테이너를 추가하고 이 컨테이너를 데이터 흐름 작업 뒤에 연결합니다.
Foreach 루프 편집기를열고 다음 설정을 사용하여 컨테이너를 구성합니다.
컬렉션 페이지에서 열거자에 대해 Foreach ADO 열거자를 선택하고 ADO 개체 원본 변수에 대해 User::BonusRecordset를 선택합니다.
변수 매핑 페이지에서 User::EmailAddress를 인덱스0에 매핑하고, User::FirstName을 인덱스 1에 매핑하고, User::Bonus를 인덱스 2에 매핑합니다.
제어 흐름 탭의 Foreach 루프 컨테이너 내에서 메일 보내기 작업을 추가합니다.
메일 보내기 태스크 편집기를연 다음 메일 페이지에서 다음 설정을 사용하여 작업을 구성합니다.
SmtpConnection에 대해 이전에 구성한 SMTP 연결 관리자를 선택합니다.
보낸 사람에 대해 적절한 전자 메일 주소를 입력합니다.
본인의 전자 메일 주소를 사용하면 패키지가 성공적으로 실행되는지 확인할 수 있습니다. 메일 보내기 작업을 통해 AdventureWorks2022의 가상 판매 직원에게 메시지를 보내면 해당 수신인에게 메시지를 배달할 수 없다는 내용의 메시지가 반환됩니다.
받는 이의 경우 전자 메일 주소의 기본값을 입력합니다.
이 값은 사용되지 않지만 런타임에 각 판매 직원의 전자 메일 주소로 대체됩니다.
제목에 "연간 보너스"를 입력합니다.
MessageSourceType에 대해 직접 입력을 선택합니다.
메일 보내기 태스크 편집기의식 페이지에서 줄임표 버튼(...)를 클릭하여 속성 식 편집기를 엽니다.
속성 식 편집기에 다음 정보를 입력합니다.
ToLine에 대해 다음 식을 추가합니다.
@[User::EmailAddress]
MessageSource 속성에대해 다음 식을 추가합니다.
"Dear " + @[User::FirstName] + ": The amount of your bonus for this year is $" + (DT_WSTR, 12) @[User::Bonus] + ". Thank you!"
패키지를 실행합니다.
올바른 SMTP 서버를 지정하고 자신의 메일 주소를 입력한 경우 메일 보내기 작업을 통해 AdventureWorks2022의 가상 판매 직원에게 메시지를 보내면 해당 수신인에게 메시지를 배달할 수 없다는 내용의 메시지가 반환됩니다.