Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйвер 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, получающие эти ошибки, должны сбросить все атрибуты инструкции курсора в их значения по умолчанию перед попыткой выполнить инструкцию.