다음을 통해 공유


결과 처리(ODBC)

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)

애플리케이션이 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 문에서 결과 집합을 처리하려면 애플리케이션에서 다음을 수행합니다.

  • 결과 집합의 특성을 결정합니다.

  • 열을 프로그램 변수에 바인딩합니다.

  • 단일 값, 전체 행의 값 또는 여러 행의 값을 검색합니다.

  • 더 많은 결과 집합이 있는지 확인하기 위해 테스트하고, 그렇다면 새 결과 집합의 특성을 확인하기 위해 다시 반복합니다.

데이터 원본에서 행을 검색하고 애플리케이션으로 반환하는 프로세스를 페치라고 합니다.

섹션 내용

참고 항목

SQL Server Native Client(ODBC)
처리 결과 방법 항목(ODBC)