Поделиться через


Быстрые курсоры последовательного доступа (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 — это количество возвращаемых строк:

  1. Установите для атрибута SQL_SOPT_SS_CURSOR_OPTIONS значение SQL_CO_FFO_AF.

  2. Задайте для SQL_ATTR_ROW_ARRAY_SIZE значение n + 1.

  3. Привязка столбцов результатов к массивам элементов n + 1 (чтобы быть безопасным, если n + 1 строки фактически извлекаются).

  4. Откройте курсор с помощью SQLExecDirect или SQLExecute.

  5. Если состояние возврата SQL_SUCCESS, вызовите SQLFreeStmt или SQLCloseCursor , чтобы закрыть курсор. Все данные для строк будут находиться в связанных программных переменных.

С помощью этих действий SQLExecDirect или SQLExecute отправляет запрос на открытие курсора с включенным параметром автозабора. В ответ на этот отдельный запрос от клиента сервер:

  • Открывает курсор.

  • Строит результирующий набор и отправляет строки клиенту.

  • Так как размер набора строк был установлен в значение на 1 большее, чем число строк результирующего набора, сервер определяет конец курсора и закрывает его.

См. также

Подробные сведения о программировании курсоров (ODBC)