쿼리에 대한 SQL 문 생성

적용 대상: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

SQL Server Native Client ODBC 드라이버는 서버 커서를 사용하여 ODBC 사양에 정의된 커서 기능을 구현합니다. ODBC 애플리케이션은 SQLSetStmtAttr 을 사용하여 다른 문 특성을 설정하여 커서 동작을 제어합니다. 다음은 이러한 특성과 해당 기본값에 대한 설명입니다.

attribute 기본값
SQL_ATTR_CONCURRENCY SQL_CONCUR_READ_ONLY
SQL_ATTR_CURSOR_TYPE SQL_CURSOR_FORWARD_ONLY
SQL_ATTR_CURSOR_SCROLLABLE SQL_NONSCROLLABLE
SQL_ATTR_CURSOR_SENSITIVITY SQL_UNSPECIFIED
SQL_ATTR_ROW_ARRAY_SIZE 1

SQL 문이 실행될 때 이러한 옵션을 기본값으로 설정하면 SQL Server Native Client ODBC 드라이버는 서버 커서를 사용하여 결과 집합을 구현하지 않고 대신 기본 결과 집합을 사용합니다. SQL 문이 실행될 때 이러한 옵션이 기본값에서 변경된 경우 SQL Server Native Client ODBC 드라이버는 서버 커서를 사용하여 결과 집합을 구현하려고 시도합니다.

기본 결과 집합은 모든 Transact-SQL 문을 지원합니다. 기본 결과 집합을 사용할 경우 실행할 수 있는 SQL 문의 유형에는 제한이 없습니다.

서버 커서는 모든 Transact-SQL 문을 지원하지 않습니다. 서버 커서에서는 여러 결과 집합을 생성하는 SQL 문이 지원되지 않습니다.

서버 커서에서 지원되지 않는 문 유형은 다음과 같습니다.

  • Batch

    다음 예와 같이 두 개 이상의 개별 SQL SELECT 문으로 작성된 SQL 문

    SELECT * FROM Authors; SELECT * FROM Titles  
    
  • 여러 SELECT 문이 있는 저장 프로시저

    둘 이상의 SELECT 문이 포함된 저장 프로시저를 실행하는 SQL 문. 여기에는 매개 변수나 변수를 채우는 SELECT 문도 포함됩니다.

  • 키워드

    FOR BROWSE 또는 INTO 키워드를 포함하는 SQL 문

SQL Server 이러한 조건과 일치하는 SQL 문이 서버 커서를 사용하여 실행되는 경우 서버 커서는 암시적으로 기본 결과 집합으로 변환됩니다. SQLExecDirect 또는 SQLExecute가 SQL_SUCCESS_WITH_INFO 반환하면 커서 특성이 기본 설정으로 다시 설정됩니다.

위의 범주에 맞지 않는 SQL 문은 모든 문 특성 설정을 사용하여 실행할 수 있으며, 기본 결과 집합이나 서버 커서 중 무엇을 사용하든 동일하게 작동합니다.

오류

SQL Server 7.0 이상에서는 여러 결과 집합을 생성하는 문을 실행하려고 하면 INFO 및 다음 메시지가 SQL_SUCCESS_WITH 생성됩니다.

SqlState: 01S02"  
pfNative: 0  
szErrorMsgString: "[Microsoft][SQL Server Native Client][SQL Server]  
               Cursor type changed."  

이 메시지를 수신하는 ODBC 애플리케이션은 SQLGetStmtAttr 을 호출하여 현재 커서 설정을 확인할 수 있습니다.

서버 커서를 사용할 때 여러 SELECT 문이 포함된 프로시저를 실행하려고 하면 다음 오류가 생성됩니다.

SqlState: 42000  
pfNative: 16937  
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]  
               A server cursor is not allowed on a stored procedure  
               with more than one SELECT statement in it. Use a  
               default result set or client cursor.  

서버 커서를 사용할 때 여러 SELECT 문이 포함된 일괄 처리를 실행하려고 하면 다음 오류가 생성됩니다.

SqlState: 42000  
pfNative: 16938  
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]  
               sp_cursoropen. The statement parameter can only  
               be a single SELECT statement or a single stored   
               procedure.  

이 오류를 수신하는 ODBC 애플리케이션은 문을 실행하기 전에 모든 커서 문 특성을 기본값으로 다시 설정해야 합니다.

참고 항목

쿼리 실행(ODBC)