Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйвер ODBC собственного клиента SQL Server использует курсоры сервера для реализации функциональности курсора, определенной в спецификации 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, драйвер ODBC собственного клиента SQL Server не использует курсор сервера для реализации результирующий набор; Вместо этого он использует результирующий набор по умолчанию. Если любой из этих параметров изменяется по умолчанию во время выполнения инструкции SQL, драйвер ODBC собственного клиента SQL Server пытается использовать курсор сервера для реализации результирующий набор.
Результирующие наборы по умолчанию поддерживают все инструкции Transact-SQL. Нет ограничений на типы инструкций SQL, которые можно выполнить при использовании результирующий набор по умолчанию.
Курсоры сервера не поддерживают все операторы Transact-SQL. Курсоры сервера не поддерживают инструкцию SQL, которая создает несколько результирующих наборов.
Следующие типы инструкций не поддерживаются курсорами сервера:
Пакеты
Инструкции SQL, созданные из двух или нескольких отдельных инструкций SQL SELECT, например:
SELECT * FROM Authors; SELECT * FROM TitlesХранимые процедуры с несколькими операторами SELECT
Инструкции SQL, выполняющие хранимую процедуру, содержащую несколько инструкций SELECT. Сюда входят инструкции SELECT, которые заполняют параметры или переменные.
Ключевые слова
Инструкции SQL, содержащие ключевые слова FOR BROWSE или INTO.
В 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.
Приложения ODBC, получающие эти ошибки, должны сбросить все атрибуты инструкции курсора до их значений по умолчанию, прежде чем пытаться выполнить инструкцию.