적용 대상: SQL Server
Azure SQL 데이터베이스
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System(PDW)
애플리케이션이 SQL 문을 제출하면 SQL Server는 결과 데이터를 하나 이상의 결과 집합으로 반환합니다. 결과 집합은 쿼리 조건과 일치하는 행과 열 집합입니다. SELECT 문, 카탈로그 함수 및 일부 저장 프로시저는 테이블 형식으로 애플리케이션에서 사용할 수 있는 결과 집합을 생성합니다. 실행된 SQL 문이 저장 프로시저, 여러 명령이 포함된 일괄 처리 또는 키워드가 포함된 SELECT 문인 경우 처리할 결과 집합이 여러 개 있습니다.
ODBC 카탈로그 함수는 데이터를 검색할 수도 있습니다. 예를 들어 SQLColumns는 데이터 원본의 열에 대한 데이터를 검색합니다. 이러한 결과 집합에는 0개 이상의 행이 포함될 수 있습니다.
또는 와 같은 GRANTREVOKE다른 SQL 문은 결과 집합을 반환하지 않습니다. 이러한 문의 경우 SQLExecute 또는 SQLExecDirect의 반환 코드는 일반적으로 문이 성공한 유일한 표시입니다.
각 INSERT, UPDATE, , 그리고 DELETE 문장은 수정에 영향을 받은 행 수만을 포함하는 결과 집합을 반환합니다. 이 개수는 애플리케이션이 SQLRowCount를 호출 할 때 사용할 수 있습니다. ODBC 3.x 애플리케이션은 결과 집합을 검색하기 위해 SQLRowCount를 호출하거나 SQLMoreResults를 호출하여 취소해야 합니다. 애플리케이션이 여러 INSERTUPDATE, , 또는 DELETE 문으로 구성된 배치 또는 저장 프로시저를 실행할 때, 각 수정 문에서 나온 결과 집합은 SQLRowCount로 처리하거나 SQLMoreResults로 취소해야 합니다. 이 카운트는 배치나 저장 프로시저에 ON 문장을 포함 SET NOCOUNT 시켜 취소할 수 있습니다.
Transact-SQL 진술서도 SET NOCOUNT 포함되어 있습니다. 옵션이 설정되어 있으면 NOCOUNT SQL Server는 문장에 영향을 받은 행의 수를 반환하지 않으며, SQLRowCount는 0을 반환합니다. SQL Server 네이티브 클라이언트 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
SETSHOWPLAN (이전 버전의 SQL Server에서 사용 가능)
SET STATISTICS
인쇄
RAISERROR
SQL Server Native Client ODBC 드라이버는 심각도가 11 이상인 RAISERROR에서 SQL_ERROR 반환합니다. RAISERROR의 심각도가 19 이상인 경우 연결도 삭제됩니다.
SQL 문에서 결과 집합을 처리하려면 애플리케이션에서 다음을 수행합니다.
결과 집합의 특성을 결정합니다.
열을 프로그램 변수에 바인딩합니다.
단일 값, 전체 행의 값 또는 여러 행의 값을 검색합니다.
더 많은 결과 집합이 있는지 확인하기 위해 테스트하고, 그렇다면 새 결과 집합의 특성을 확인하기 위해 다시 반복합니다.
데이터 원본에서 행을 검색하고 애플리케이션으로 반환하는 프로세스를 페치라고 합니다.