다음을 통해 공유


행 집합 및 SQL Server 커서

적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

OLE DB 드라이버 다운로드

SQL Server는 다음 두 가지 방법을 사용하여 결과 집합을 소비자에게 반환합니다.

  • 기본 결과는 다음을 설정합니다.

    • 오버헤드를 최소화합니다.

    • 데이터 가져오기에서 최대 성능을 제공합니다.

    • 정방향 전용, 읽기 전용 기본 커서 기능만 지원합니다.

    • 한 번에 한 행씩 소비자에게 행을 반환합니다.

    • 연결에서 한 번에 하나의 활성 문만 지원합니다.

      문이 실행된 후 소비자가 모든 결과를 검색하거나 문이 취소될 때까지 해당 연결에서 다른 문을 실행할 수 없습니다.

    • 모든 Transact-SQL 문을 지원합니다.

  • 서버 커서:

    • 모든 커서 기능을 지원합니다.

    • 행 블록을 소비자에게 반환할 수 있습니다.

    • 단일 연결에서 여러 개의 활성 문을 지원합니다.

    • 커서 기능을 성능과 균형 조정합니다.

      커서 기능을 지원하면 기본 결과 집합에 비해 성능이 저하될 수 있습니다. 소비자가 커서 기능을 사용하여 더 작은 행 집합을 검색할 수 있는 경우 이를 오프셋할 수 있습니다.

    • 결과 집합을 두 개 이상 반환하는 Transact-SQL 문을 지원하지 않습니다.

소비자는 특정 행 집합 속성을 설정하여 행 집합에서 다른 커서 동작을 요청할 수 있습니다. 소비자가 이러한 행 집합 속성 중 하나를 설정하지 않거나 모두 해당 기본값으로 설정하면 SQL Server용 OLE DB 드라이버는 기본 결과 집합을 사용하여 행 집합을 구현합니다. 이러한 속성 중 하나라도 기본값이 아닌 값으로 설정하면 SQL Server용 OLE DB 드라이버는 서버 커서를 사용하여 행 집합을 구현합니다.

다음 행 집합 속성은 SQL Server용 OLE DB 드라이버에서 SQL Server 커서를 사용하도록 지시합니다. 일부 속성은 다른 속성과 안전하게 결합할 수 있습니다. 예를 들어 DBPROP_IRowsetScroll 및 DBPROP_IRowsetChange 속성을 나타내는 행 집합은 즉시 업데이트 동작을 표시하는 책갈피 행 집합이 됩니다. 다른 속성은 상호 배타적입니다. 예를 들어 DBPROP_OTHERINSERT 나타내는 행 집합에는 책갈피가 포함될 수 없습니다.

속성 ID 행 집합 동작
DBPROP_SERVERCURSOR VARIANT_TRUE 행 집합을 통해 SQL Server 데이터를 업데이트할 수 없습니다. 행 집합은 순차적이므로 앞으로 스크롤 및 가져오기만 지원합니다. 상대 행 위치 지정이 지원됩니다. 명령 텍스트에는 ORDER BY 절이 포함될 수 있습니다.
DBPROP_CANSCROLLBACKWARDS 또는 DBPROP_CANFETCHBACKWARDS VARIANT_TRUE 행 집합을 통해 SQL Server 데이터를 업데이트할 수 없습니다. 행 집합은 어느 방향으로든 스크롤 및 가져오기를 지원합니다. 상대 행 위치 지정이 지원됩니다. 명령 텍스트에는 ORDER BY 절이 포함될 수 있습니다.
DBPROP_BOOKMARKS 또는 DBPROP_LITERALBOOKMARKS VARIANT_TRUE 행 집합을 통해 SQL Server 데이터를 업데이트할 수 없습니다. 행 집합은 순차적이므로 앞으로 스크롤 및 가져오기만 지원합니다. 상대 행 위치 지정이 지원됩니다. 명령 텍스트에는 ORDER BY 절이 포함될 수 있습니다.
DBPROP_OWNUPDATEDELETE 또는 DBPROP_OWNINSERT 또는 DBPROP_OTHERUPDATEDELETE VARIANT_TRUE 행 집합을 통해 SQL Server 데이터를 업데이트할 수 없습니다. 행 집합은 어느 방향으로든 스크롤 및 가져오기를 지원합니다. 상대 행 위치 지정이 지원됩니다. 명령 텍스트에는 ORDER BY 절이 포함될 수 있습니다.
DBPROP_OTHERINSERT VARIANT_TRUE 행 집합을 통해 SQL Server 데이터를 업데이트할 수 없습니다. 행 집합은 어느 방향으로든 스크롤 및 가져오기를 지원합니다. 상대 행 위치 지정이 지원됩니다. 참조된 열에 인덱스가 있는 경우 명령 텍스트에 ORDER BY 절이 포함될 수 있습니다.

행 집합에 책갈피가 포함되어 있으면 DBPROP_OTHERINSERT VARIANT_TRUE 수 없습니다. 이 표시 유형 속성과 책갈피를 사용하여 행 집합을 만들려고 하면 오류가 발생합니다.
DBPROP_IRowsetLocate 또는 DBPROP_IRowsetScroll VARIANT_TRUE 행 집합을 통해 SQL Server 데이터를 업데이트할 수 없습니다. 행 집합은 어느 방향으로든 스크롤 및 가져오기를 지원합니다. IRowsetLocate 인터페이스를 통한 책갈피 및 절대 위치 지정이 행 집합에서 지원됩니다. 명령 텍스트에는 ORDER BY 절이 포함될 수 있습니다.

DBPROP_IRowsetLocate 및 DBPROP_IRowsetScroll은 행 집합에 책갈피가 필요합니다. 책갈피가 있는 행 집합을 만들고 DBPROP_OTHERINSERT VARIANT_TRUE 설정하면 오류가 발생합니다.
DBPROP_IRowsetChange 또는 DBPROP_IRowsetUpdate VARIANT_TRUE 행 집합을 통해 SQL Server 데이터를 업데이트할 수 있습니다. 행 집합은 순차적이므로 앞으로 스크롤 및 가져오기만 지원합니다. 상대 행 위치 지정이 지원됩니다. 변경할 수 있는 커서를 지원하는 모든 명령은 이러한 인터페이스를 지원할 수 있습니다.
DBPROP_IRowsetLocate 또는 DBPROP_IRowsetScroll 및 DBPROP_IRowsetChange 또는 DBPROP_IRowsetUpdate VARIANT_TRUE 행 집합을 통해 SQL Server 데이터를 업데이트할 수 있습니다. 행 집합은 어느 방향으로든 스크롤 및 가져오기를 지원합니다. 행 집합에서 IRowsetLocate를 통한 책갈피 및 절대 위치 지정이 지원됩니다. 명령 텍스트에는 ORDER BY 절이 포함될 수 있습니다.
DBPROP_IMMOBILEROWS VARIANT_FALSE 행 집합을 통해 SQL Server 데이터를 업데이트할 수 없습니다. 행 집합은 앞으로 스크롤만 지원합니다. 상대 행 위치 지정이 지원됩니다. 참조된 열에 인덱스가 있는 경우 명령 텍스트에 ORDER BY 절이 포함될 수 있습니다.

DBPROP_IMMOBILEROWS 다른 세션 또는 다른 사용자의 명령에 의해 삽입된 SQL Server 행을 표시할 수 있는 행 집합에서만 사용할 수 있습니다. DBPROP_OTHERINSERT VARIANT_TRUE 수 없는 행 집합에서 속성이 VARIANT_FALSE 설정된 행 집합을 열려고 하면 오류가 발생합니다.
DBPROP_REMOVEDELETED VARIANT_TRUE 행 집합을 통해 SQL Server 데이터를 업데이트할 수 없습니다. 행 집합은 앞으로 스크롤만 지원합니다. 상대 행 위치 지정이 지원됩니다. 명령 텍스트는 다른 속성으로 제한되지 않는 한 ORDER BY 절을 포함할 수 있습니다.

서버 커서에서 지원하는 OLE DB Driver for SQL Server 행 집합은 IOpenRowset::OpenRowset 메서드를 사용하여 SQL Server 기본 테이블 또는 뷰에서 쉽게 만들 수 있습니다. rgPropertySets 매개 변수에 필요한 행 집합 속성 세트를 전달하여 이름으로 테이블이나 뷰를 지정합니다.

행 집합이 서버 커서에서 지원되도록 소비자가 요구하는 경우 행 집합을 만드는 명령 텍스트가 제한됩니다. 구체적으로, 명령 텍스트는 단일 행 집합 결과를 반환하는 단일 SELECT 문이나 단일 행 집합 결과를 반환하는 단일 SELECT 문을 구현하는 저장 프로시저로 제한됩니다.

이 두 테이블은 다양한 OLE DB 속성과 커서 모델의 매핑을 보여 줍니다. 또한 특정 유형의 커서 모델을 사용하도록 설정해야 하는 행 집합 속성도 보여 줍니다.

표의 각 셀에는 특정 커서 모델의 행 집합 속성 값이 포함됩니다. 이 항목의 앞부분에 표시된 모든 행 집합 속성의 데이터 형식은 VT_BOOL이고 기본값은 VARIANT_FALSE입니다. 다음 기호가 표에 사용됩니다.

F = 기본값(VARIANT_FALSE)

T = VARIANT_TRUE

- = VARIANT_TRUE 또는 VARIANT_FALSE

특정 유형의 커서 모델을 사용하려면 커서 모델에 해당하는 열을 찾고 열에서 값이 'T'인 모든 행 집합 속성을 찾습니다. 특정 커서 모델을 사용하도록 이러한 행 집합 속성을 VARIANT_TRUE 설정합니다. '-'를 값으로 사용하는 행 집합 속성을 VARIANT_TRUE 또는 VARIANT_FALSE 설정할 수 있습니다.

행 집합 속성/커서 모델 기본값

result

set

(RO)
빠름

전달-

전용

(RO)
정적

(RO)
Keyset

구동

(RO)
DBPROP_SERVERCURSOR F T T T
DBPROP_DEFERRED F F - -
DBPROP_IrowsetChange F F F F
DBPROP_IrowsetLocate F F - -
DBPROP_IrowsetScroll F F - -
DBPROP_IrowsetUpdate F F F F
DBPROP_BOOKMARKS F F - -
DBPROP_CANFETCHBACKWARDS F F - -
DBPROP_CANSRCOLLBACKWARDS F F - -
DBPROP_CANHOLDROWS F F - -
DBPROP_LITERALBOOKMARKS F F - -
DBPROP_OTHERINSERT F T F F
DBPROP_OTHERUPDATEDELETE F T F T
DBPROP_OWNINSERT F T F T
DBPROP_OWNUPDATEDELETE F T F T
DBPROP_QUICKSTART F F - -
DBPROP_REMOVEDELETED F F F -
DBPROP_IrowsetResynch F F F -
DBPROP_CHANGEINSERTEDROWS F F F F
DBPROP_SERVERDATAONINSERT F F F -
DBPROP_UNIQUEROWS - F F F
DBPROP_IMMOBILEROWS - - - T
행 집합 속성/커서 모델 동적(RO) 키 집합(R/W) 동적(R/W)
DBPROP_SERVERCURSOR T T T
DBPROP_DEFERRED - - -
DBPROP_IrowsetChange F - -
DBPROP_IrowsetLocate F - F
DBPROP_IrowsetScroll F - F
DBPROP_IrowsetUpdate F - -
DBPROP_BOOKMARKS F - F
DBPROP_CANFETCHBACKWARDS - - -
DBPROP_CANSRCOLLBACKWARDS - - -
DBPROP_CANHOLDROWS F - F
DBPROP_LITERALBOOKMARKS F - F
DBPROP_OTHERINSERT T F T
DBPROP_OTHERUPDATEDELETE T T T
DBPROP_OWNINSERT T T T
DBPROP_OWNUPDATEDELETE T T T
DBPROP_QUICKSTART - - -
DBPROP_REMOVEDELETED T - T
DBPROP_IrowsetResynch - - -
DBPROP_CHANGEINSERTEDROWS F - F
DBPROP_SERVERDATAONINSERT F - F
DBPROP_UNIQUEROWS F F F
DBPROP_IMMOBILEROWS F T F

특정 행 집합 속성 집합의 경우 선택되는 커서 모델은 다음과 같이 결정됩니다.

행 집합 속성의 지정된 컬렉션에서 이전 테이블에 나열된 속성의 하위 집합을 가져옵니다. 각 행 집합 속성의 플래그 값 필수(T, F) 또는 선택적(-)에 따라 이러한 속성을 두 개의 하위 그룹으로 나눕니다. 각 커서 모델에 대해 첫 번째 테이블에서 시작하여 왼쪽에서 오른쪽으로 이동합니다. 두 하위 그룹의 속성 값을 해당 열의 해당 속성 값과 비교합니다. 필수 속성과 일치하지 않는 커서 모델과 선택적 속성과의 불일치 수가 가장 적습니다. 둘 이상의 커서 모델이 있는 경우 맨 왼쪽이 선택됩니다.

SQL Server 커서 블록 크기

SQL Server 커서가 OLE DB Driver for SQL Server 행 집합을 지원하는 경우 IRowset::GetNextRows 또는 IRowsetLocate::GetRowsAt 메서드의 행 핸들 배열 매개 변수에 있는 요소 수가 커서 블록 크기를 정의합니다. 배열의 핸들로 표시된 행이 커서 블록의 멤버입니다.

책갈피를 지원하는 행 집합의 경우 IRowsetLocate::GetRowsByBookmark 메서드를 사용하여 검색된 행 핸들이 커서 블록의 멤버를 정의합니다.

행 집합을 채우고 SQL Server 커서 블록을 형성하는 데 사용되는 메서드에 관계없이 커서 블록은 행 집합에서 다음 행 페치 메서드가 실행될 때까지 활성화됩니다.

참고 항목

행 집합