쿼리에 대한 SQL 문 생성
SQL Server Native Client ODBC 드라이버는 서버 커서를 사용하여 ODBC 사양에 정의된 커서 기능을 구현합니다. ODBC 응용 프로그램은 SQLSetStmtAttr에 여러 문 특성을 설정하여 커서 동작을 제어합니다. 다음은 이러한 특성과 해당 기본값에 대한 설명입니다.
특성 |
기본값 |
---|---|
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 문이 지원되지 않습니다.
서버 커서에서 지원되지 않는 문 유형은 다음과 같습니다.
일괄 처리
다음 예와 같이 두 개 이상의 개별 SQL SELECT 문으로 작성된 SQL 문
SELECT * FROM Authors; SELECT * FROM Titles
여러 SELECT 문이 있는 저장 프로시저
둘 이상의 SELECT 문이 포함된 저장 프로시저를 실행하는 SQL 문. 여기에는 매개 변수나 변수를 채우는 SELECT 문도 포함됩니다.
키워드
키워드 COMPUTE, COMPUTE BY, FOR BROWSE 또는 INTO를 포함하는 SELECT 문
SQL Server에서 이러한 조건과 일치하는 SQL 문을 서버 커서를 사용하여 실행하면 서버 커서가 암시적으로 기본 결과 집합으로 변환됩니다. SQLExecDirect 또는 SQLExecute에서 SQL_SUCCESS_WITH_INFO를 반환한 후에 커서 특성이 기본 설정으로 다시 설정됩니다.
위의 범주에 맞지 않는 SQL 문은 모든 문 특성 설정을 사용하여 실행할 수 있으며, 기본 결과 집합이나 서버 커서 중 무엇을 사용하든 동일하게 작동합니다.
오류
SQL Server 7.0 이상에서 여러 결과 집합을 반환하는 문을 실행하려고 하면 SQL_SUCCESS_WITH INFO 및 다음 메시지가 생성됩니다.
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.
서버 커서를 사용할 때 COMPUTE 절이 포함된 SELECT 문을 실행하려고 하면 다음 오류가 생성됩니다.
SqlState: 42000
pfNative: 16907
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]
'COMPUTE' is not allowed in cursor statements.
이 오류를 수신하는 ODBC 응용 프로그램은 문을 실행하기 전에 모든 커서 문 특성을 기본값으로 다시 설정해야 합니다.