Конструирование инструкций SQL для курсоров
Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse AnalyticsAnalytics Platform 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 для этих параметров заданы значения по умолчанию, драйвер ODBC SQL Server Native Client не использует серверный курсор для реализации результирующих наборов. Вместо этого используется результирующий набор по умолчанию. Если какой-либо из этих параметров изменяется от значений по умолчанию во время выполнения инструкции SQL, драйвер ODBC SQL Server Native Client попытается использовать серверный курсор для реализации результирующих наборов.
Результирующие наборы по умолчанию поддерживают все инструкции Transact-SQL. Ограничения на типы инструкций SQL, которые можно выполнять при использовании результирующего набора по умолчанию, отсутствуют.
Серверные курсоры поддерживают не все инструкции Transact-SQL. Серверные курсоры не поддерживают любые инструкции SQL, формирующие множественные результирующие наборы.
Следующие типы инструкций не поддерживаются серверными курсорами.
Пакеты
Инструкции SQL, состоящие из двух и более отдельных инструкций SQL SELECT, например:
SELECT * FROM Authors; SELECT * FROM Titles
Хранимые процедуры с несколькими инструкциями SELECT
Инструкции SQL, которые выполняют хранимую процедуру, содержащую более одной инструкции SELECT. К ним относятся инструкции SELECT, которые заполняют параметры или переменные.
Keywords
Инструкции 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, получающие эти ошибки, должны сбросить все атрибуты инструкции курсора в их значения по умолчанию перед попыткой выполнить инструкцию.
См. также:
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по