행 집합 및 SQL Server 커서
적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
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 커서 블록을 형성하는 데 사용되는 메서드에 관계없이 커서 블록은 행 집합에서 다음 행 페치 메서드가 실행될 때까지 활성화됩니다.