Быстрые курсоры последовательного доступа (ODBC)
Применимо: SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
azure Synapse Analytics Analytics
Platform System (PDW)
При подключении к экземпляру SQL Server драйвер ODBC собственного клиента SQL Server поддерживает оптимизацию производительности только для перенаправленных курсоров только для чтения. Быстрые однопроходные курсоры реализуются драйвером и сервером внутренне, при этом способ реализации очень похож на результирующие наборы по умолчанию. Кроме того, имея высокую производительность, быстрые однопроходные курсоры обладают следующими характеристиками.
SQLGetData не поддерживается. Столбцы результирующего набора должны быть привязаны к переменным программы.
Когда сервер достигает конца курсора, он автоматически закрывает курсор. Приложение должно по-прежнему вызывать SQLCloseCursor или SQLFreeStmt(SQL_CLOSE), но драйвер не должен отправлять близкий запрос серверу. Это экономит обращение через сеть к серверу.
Приложение запрашивает быстрые однопроходные курсоры при помощи атрибута инструкции SQL_SOPT_SS_CURSOR_OPTIONS, зависящего от драйвера. При установке значения SQL_CO_FFO быстрые однопроходные курсоры разрешаются без автоматической выборки. При установке значения SQL_CO_FFO_AF включен параметр автоматической выборки. Дополнительные сведения об автозаборе см. в разделе "Использование автозабора с курсорами ODBC".
Быстрые однопроходные курсоры с автоматической выборкой можно использовать для получения небольшого результирующего набора с однократным обращением к серверу. В следующих шагах n — это количество возвращаемых строк:
Установите для атрибута SQL_SOPT_SS_CURSOR_OPTIONS значение SQL_CO_FFO_AF.
Задайте для SQL_ATTR_ROW_ARRAY_SIZE значение n + 1.
Привязка столбцов результатов к массивам элементов n + 1 (чтобы быть безопасным, если n + 1 строки фактически извлекаются).
Откройте курсор с помощью SQLExecDirect или SQLExecute.
Если состояние возврата SQL_SUCCESS, вызовите SQLFreeStmt или SQLCloseCursor , чтобы закрыть курсор. Все данные для строк будут находиться в связанных программных переменных.
С помощью этих действий SQLExecDirect или SQLExecute отправляет запрос на открытие курсора с включенным параметром автозабора. В ответ на этот отдельный запрос от клиента сервер:
Открывает курсор.
Строит результирующий набор и отправляет строки клиенту.
Так как размер набора строк был установлен в значение на 1 большее, чем число строк результирующего набора, сервер определяет конец курсора и закрывает его.