SQL Server 기본 결과 집합 사용
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
기본 ODBC 커서 특성은 다음과 같습니다.
SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, SQL_CURSOR_FORWARD_ONLY, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, SQL_CONCUR_READ_ONLY, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, 1, SQL_IS_INTEGER);
이러한 특성이 기본값으로 설정될 때마다 SQL Server Native Client ODBC 드라이버는 SQL Server 기본 결과 집합을 사용합니다. 기본 결과 집합은 SQL Server에서 지원하는 모든 SQL 문에 사용할 수 있으며 전체 결과 집합을 클라이언트로 전송하는 가장 효율적인 방법입니다.
SQL Server 2005(9.x)는 MARS(여러 활성 결과 집합)에 대한 지원을 도입했습니다. 이제 애플리케이션은 연결당 둘 이상의 활성 기본 결과 집합을 가질 수 있습니다. MARS는 기본적으로 사용하도록 설정되지 않습니다.
SQL Server 2005(9.x) 이전에는 기본 결과 집합이 동일한 연결에서 여러 활성 문을 지원하지 않았습니다. 연결에서 SQL 문을 실행한 후 서버는 결과 집합의 모든 행이 처리될 때까지 해당 연결의 클라이언트에서 명령(결과 집합의 나머지 부분을 취소하는 요청 제외)을 수락하지 않습니다. 부분적으로 처리된 결과 집합의 나머지 부분을 취소하려면 fOption 매개 변수가 SQL_CLOSE 설정된 SQLCloseCursor 또는 SQLFreeStmt 를 호출합니다. 부분적으로 처리된 결과 집합을 완료하고 다른 결과 집합이 있는지 테스트하려면 SQLMoreResults를 호출 합니다. 기본 결과 집합이 완전히 처리되기 전에 ODBC 애플리케이션이 연결 핸들에서 명령을 시도하는 경우 호출은 SQL_ERROR 생성하고 SQLGetDiagRec에 대한 호출은 다음을 반환합니다.
szSqlState: "HY000", pfNativeError: 0
szErrorMsg: "[Microsoft][SQL Server Native Client]
Connection is busy with results for another hstmt."