애플리케이션이 SQL 문을 제출하면 SQL Server는 결과 데이터를 하나 이상의 결과 집합으로 반환합니다. 결과 집합은 쿼리 조건과 일치하는 행 및 열 집합입니다. SELECT 문, 카탈로그 함수 및 일부 저장 프로시저는 테이블 형식으로 애플리케이션에서 사용할 수 있는 결과 집합을 생성합니다. 실행된 SQL 문이 저장 프로시저, 여러 명령이 포함된 일괄 처리 또는 키워드가 포함된 SELECT 문인 경우 처리할 결과 집합이 여러 개 있습니다.
ODBC 카탈로그 함수는 데이터를 검색할 수도 있습니다. 예를 들어 SQLColumns는 데이터 원본의 열에 대한 데이터를 검색합니다. 이러한 결과 집합에는 0개 이상의 행이 포함될 수 있습니다.
GRANT 또는 REVOKE와 같은 다른 SQL 문은 결과 집합을 반환하지 않습니다. 이러한 문의 경우 SQLExecute 또는 SQLExecDirect 의 반환 코드는 일반적으로 문이 성공한 유일한 표시입니다.
각 INSERT, UPDATE 및 DELETE 문은 수정의 영향을 받는 행 수만 포함하는 결과 집합을 반환합니다. 이 개수는 애플리케이션이 SQLRowCount를 호출할 때 사용할 수 있습니다. ODBC 3. x 애플리케이션은 결과 집합을 검색하기 위해 SQLRowCount 를 호출하거나 SQLMoreResults 를 호출하여 취소해야 합니다. 애플리케이션이 여러 INSERT, UPDATE 또는 DELETE 문을 포함하는 일괄 처리 또는 저장 프로시저를 실행하는 경우 각 수정 문의 결과 집합을 SQLRowCount 를 사용하여 처리하거나 SQLMoreResults를 사용하여 취소해야 합니다. 이러한 개수는 일괄 처리 또는 저장 프로시저에 SET NOCOUNT ON 문을 포함하여 취소할 수 있습니다.
Transact-SQL SET NOCOUNT 문을 포함합니다. NOCOUNT 옵션을 설정하면 SQL Server는 문의 영향을 받는 행 수를 반환하지 않고 SQLRowCount 는 0을 반환합니다. SQL Server Native Client ODBC 드라이버 버전에는 NOCOUNT 옵션이 설정 또는 해제되었는지 여부를 보고하는 드라이버별 SQLGetStmtAttr 옵션(SQL_SOPT_SS_NOCOUNT_STATUS)이 도입되었습니다. SQLRowCount가 0을 반환할 때마다 애플리케이션은 SQL_SOPT_SS_NOCOUNT_STATUS 테스트해야 합니다. SQL_NC_ON 반환되는 경우 SQLRowCount 의 값 0은 SQL Server가 행 수를 반환하지 않았다는 것만 나타냅니다. SQL_NC_OFF 반환되면 NOCOUNT가 꺼져 있고 SQLRowCount 의 값 0은 문이 행에 영향을 주지 않았음을 나타냅니다. SQL_SOPT_SS_NOCOUNT_STATUS SQL_NC_OFF 경우 애플리케이션에서 SQLRowCount 값을 표시해서는 안 됩니다. 큰 일괄 처리 또는 저장 프로시저에는 여러 SET NOCOUNT 문이 포함될 수 있으므로 프로그래머는 SQL_SOPT_SS_NOCOUNT_STATUS 일정하게 유지된다고 가정할 수 없습니다. SQLRowCount가 0을 반환할 때마다 이 옵션을 테스트해야 합니다.
다른 여러 Transact-SQL 문은 결과 집합이 아닌 메시지로 데이터를 반환합니다. SQL Server Native Client ODBC 드라이버가 이러한 메시지를 받으면 SQL_SUCCESS_WITH_INFO 반환하여 애플리케이션에 정보 메시지를 사용할 수 있음을 알 수 있습니다. 그러면 애플리케이션에서 SQLGetDiagRec 를 호출하여 이러한 메시지를 검색할 수 있습니다. 이러한 방식으로 작동하는 Transact-SQL 문은 다음과 같습니다.
DBCC
SET SHOWPLAN(이전 버전의 SQL Server에서 사용 가능)
SET STATISTICS
인쇄하다
RAISERROR
SQL Server Native Client ODBC 드라이버는 심각도가 11 이상인 RAISERROR에서 SQL_ERROR 반환합니다. RAISERROR의 심각도가 19 이상인 경우 연결도 삭제됩니다.
SQL 문에서 결과 집합을 처리하려면 애플리케이션에서 다음을 수행합니다.
결과 집합의 특성을 결정합니다.
열을 프로그램 변수에 바인딩합니다.
단일 값, 전체 값 행 또는 여러 행의 값을 검색합니다.
더 많은 결과 집합이 있는지 확인하기 위해 테스트하고, 그렇다면 새 결과 집합의 특성을 확인하기 위해 다시 반복합니다.
데이터 원본에서 행을 검색하고 애플리케이션으로 반환하는 프로세스를 페치라고 합니다.