다음을 통해 공유


SQL 실행 태스크의 결과 집합

Integration Services 패키지에서 결과 집합이 SQL 실행 태스크로 반환되는지 여부는 태스크에서 사용하는 SQL 명령의 유형에 따라 달라집니다. 예를 들어 SELECT 문은 일반적으로 결과 집합을 반환하지만 INSERT 문은 반환하지 않습니다.

결과 집합에 포함된 내용도 SQL 명령에 따라 다릅니다. 예를 들어 SELECT 문의 결과 집합에는 행 0개, 행 1개 또는 여러 행이 포함될 수 있습니다. 그러나 개수 또는 합계를 반환하는 SELECT 문의 결과 집합에는 단일 행만 포함됩니다.

SQL 실행 태스크에서 결과 집합을 사용하는 것은 SQL 명령이 결과 집합을 반환하는지 여부와 결과 집합에 포함된 항목을 아는 것 이상입니다. SQL 실행 태스크에서 결과 집합을 성공적으로 사용하기 위한 추가 사용 요구 사항 및 지침이 있습니다. 이 항목의 나머지 부분에서는 이러한 사용 요구 사항 및 지침을 다룹니다.

결과 집합 형식 지정

SQL 실행 태스크는 다음과 같은 유형의 결과 집합을 지원합니다.

  • 없음 결과 집합은 쿼리가 결과를 반환하지 않을 때 사용됩니다. 예를 들어 이 결과 집합은 테이블의 레코드를 추가, 변경 및 삭제하는 쿼리에 사용됩니다.

  • 단일 행 결과 집합은 쿼리가 하나의 행만 반환할 때 사용됩니다. 예를 들어 이 결과 집합은 개수 또는 합계를 반환하는 SELECT 문에 사용됩니다.

  • 전체 결과 집합 결과 집합은 쿼리가 여러 행을 반환할 때 사용됩니다. 예를 들어 이 결과 집합은 테이블의 모든 행을 검색하는 SELECT 문에 사용됩니다.

  • XML 결과 집합은 쿼리가 XML 형식으로 결과 집합을 반환할 때 사용됩니다. 예를 들어 이 결과 집합은 FOR XML 절을 포함하는 SELECT 문에 사용됩니다.

SQL 실행 태스크에서 전체 결과 집합 결과 집합 을 사용하고 쿼리가 여러 행 집합을 반환하는 경우 태스크는 첫 번째 행 집합만 반환합니다. 이 행 집합에서 오류를 생성하면 태스크에서 오류를 보고합니다. 다른 행 집합이 오류를 생성하는 경우 태스크는 오류를 보고하지 않습니다.

결과 집합으로 변수 채우기

결과 집합 형식이 단일 행, 행 집합 또는 XML인 경우 쿼리가 반환하는 결과 집합을 사용자 정의 변수에 바인딩할 수 있습니다.

결과 집합 형식이 단일 행인 경우 열 이름을 결과 집합 이름으로 사용하여 반환 결과의 열을 변수에 바인딩하거나 열 목록에서 열의 서수 위치를 결과 집합 이름으로 사용할 수 있습니다. 예를 들어 쿼리 SELECT Color FROM Production.Product WHERE ProductID = ? 의 결과 집합 이름은 또는 0일 수 있습니다. 쿼리가 여러 열을 반환하고 모든 열의 값에 액세스하려는 경우 각 열을 다른 변수에 바인딩해야 합니다. 숫자를 결과 집합 이름으로 사용하여 변수에 열을 매핑하는 경우 열이 쿼리의 열 목록에 표시되는 순서가 숫자에 반영됩니다. 예를 들어 쿼리 SELECT Color, ListPrice, FROM Production.Product WHERE ProductID = ?에서 Color 열에는 0, ListPrice 열에는 1을 사용합니다. 열 이름을 결과 집합의 이름으로 사용하는 기능은 태스크가 사용하도록 구성된 공급자에 따라 달라집니다. 모든 공급자가 열 이름을 제공하지는 않습니다.

단일 값을 반환하는 일부 쿼리에는 열 이름이 포함되지 않을 수 있습니다. 예를 들어 이 문 SELECT COUNT (*) FROM Production.Product 은 열 이름을 반환하지 않습니다. 결과 이름으로 서수 위치 0을 사용하여 반환 결과에 액세스할 수 있습니다. 열 이름으로 반환 결과에 액세스하려면 열 이름을 제공하려면 쿼리에 AS <별칭 이름> 절이 포함되어야 합니다. 이 문 SELECT COUNT (*)AS CountOfProduct FROM Production.ProductCountOfProduct 열을 제공합니다. 그런 다음 CountOfProduct 열 이름 또는 서수 위치 0을 사용하여 반환 결과 열에 액세스할 수 있습니다.

결과 집합 형식이 전체 결과 집합 또는 XML인 경우 0을 결과 집합 이름으로 사용해야 합니다.

단일 행 결과 집합 형식을 사용하여 결과 집합에 변수를 매핑하는 경우 변수에는 결과 집합에 포함된 열의 데이터 형식과 호환되는 데이터 형식이 있어야 합니다. 예를 들어 데이터 형식의 열 String 이 포함된 결과 집합은 숫자 데이터 형식의 변수에 매핑할 수 없습니다. TypeConversionMode 속성을 Allowed설정하면 SQL 실행 태스크는 출력 매개 변수 및 쿼리 결과를 결과가 할당된 변수의 데이터 형식으로 변환하려고 시도합니다.

XML 결과 집합은 String 또는 Object 데이터 형식으로 된 변수에만 매핑할 수 있습니다. 변수에 데이터 형식이 String 있는 경우 SQL 실행 태스크는 문자열을 반환하고 XML 원본은 XML 데이터를 사용할 수 있습니다. 변수에 데이터 형식이 Object 있는 경우 SQL 실행 태스크는 DOM(문서 개체 모델) 개체를 반환합니다.

전체 결과 집합은 데이터 형식의 변수에 Object 매핑되어야 합니다. 반환 결과는 행 집합 개체입니다. Foreach 루프 컨테이너를 사용하여 개체 변수에 저장된 테이블 행 값을 패키지 변수로 추출한 다음 스크립트 태스크를 사용하여 패키지 변수에 저장된 데이터를 파일에 쓸 수 있습니다. Foreach 루프 컨테이너와 스크립트 태스크를 사용하여 이 작업을 수행하는 방법에 대한 데모는 msftisprodsamples.codeplex.com에 있는 CodePlex 샘플인 SQL 매개 변수 및 결과 집합을 실행에서 확인할 수 있습니다.

다음 표에는 결과 집합에 매핑할 수 있는 변수의 데이터 형식이 요약되어 있습니다.

결과 집합 형식 변수의 데이터 형식 개체 형식
단일 행 결과 집합의 형식 열과 호환되는 모든 형식입니다. 해당 없음
전체 결과 목록 Object 작업에서 ADO, OLE DB, Excel 및 ODBC 연결 관리자를 비롯한 네이티브 연결 관리자를 사용하는 경우 반환된 개체는 ADO Recordset입니다.

태스크에서 ADO.NET 연결 관리자와 같은 관리되는 연결 관리자를 사용하는 경우 반환된 개체는 다음과 같습니다 System.Data.DataSet.

다음 예제와 같이 스크립트 작업을 사용하여 개체에 System.Data.DataSet 액세스할 수 있습니다.

Dim dt As Data.DataTable
Dim ds As Data.DataSet = CType(Dts.Variables("Recordset").Value, DataSet)
dt = ds.Tables(0)
XML String String
XML Object 작업에서 ADO, OLE DB, Excel 및 ODBC 연결 관리자를 비롯한 네이티브 연결 관리자를 사용하는 경우 반환된 개체는 MSXML6.IXMLDOMDocument입니다.

태스크에서 ADO.NET 연결 관리자와 같은 관리되는 연결 관리자를 사용하는 경우 반환된 개체는 다음과 같습니다 System.Xml.XmlDocument.

변수는 SQL 실행 태스크 또는 패키지의 범위에서 정의할 수 있습니다. 변수에 패키지 범위가 있는 경우 결과 집합은 패키지 내의 다른 태스크 및 컨테이너에서 사용할 수 있으며 패키지 실행 또는 DTS 2000 패키지 실행 태스크에서 실행하는 모든 패키지에서 사용할 수 있습니다.

변수를 단일 행 결과 집합에 매핑하는 경우 SQL 문이 반환하는 문자열이 아닌 값은 다음 조건이 충족될 때 문자열로 변환됩니다.

  • TypeConversionMode 속성이 true로 설정됩니다. 속성 창에서 또는 SQL 실행 태스크 편집기를 사용하여 속성 값을 설정합니다.

  • 변환으로 인해 데이터 잘림이 발생하지 않습니다.

결과 집합을 변수로 로드하는 방법에 대한 자세한 내용은 SQL 실행 태스크에서 결과 집합을 변수로 매핑을 참조하세요.

SQL 실행 태스크에서 결과 집합 구성

SSIS 디자이너에서 설정할 수 있는 결과 집합의 속성에 대한 자세한 내용은 다음 항목을 클릭합니다.

SSIS 디자이너에서 이러한 속성을 설정하는 방법에 대한 자세한 내용은 다음 항목을 클릭합니다.

SQL 실행 태스크의 변수에 결과 집합 매핑