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