Бөлісу құралы:


Обработка инструкций позиционированного обновления и удаления

Внимание

Эта функция будет удалена в будущей версии Windows. Избегайте использования этой функции в новых рабочих областях разработки и планируете изменять приложения, которые в настоящее время используют эту функцию. Корпорация Майкрософт рекомендует использовать функции курсора драйвера.

Библиотека курсоров поддерживает позиционированные инструкции обновления и удаления, заменив предложение WHERE CURRENT OF в таких инструкциях предложением WHERE , которое перечисляет значения, хранящиеся в кэше для каждого связанного столбца. Библиотека курсоров передает недавно созданные инструкции UPDATE и DELETE драйверу для выполнения. Для позиционированных инструкций обновления библиотека курсоров обновляет кэш из значений в буферах набора строк и задает соответствующее значение в массиве состояния строки SQL_ROW_UPDATED. Для позиционированных инструкций удаления он задает соответствующее значение в массиве состояния строки SQL_ROW_DELETED.

Внимание

Предложение WHERE , созданное библиотекой курсоров для идентификации текущей строки, может не идентифицировать строки, определить другую строку или определить несколько строк. Дополнительные сведения см. в разделе "Создание инструкций поиска" далее в этом приложении.

Размещенные инструкции обновления и удаления подвергаются следующим ограничениям:

  • Позиционированные инструкции обновления и удаления можно использовать только в следующих случаях: когда инструкция SELECT создает результирующий набор; если инструкция SELECT не содержит соединения, предложение UNION или предложение GROUP BY, а также когда любые столбцы, использующие псевдоним или выражение в списке выбора, не привязаны к SQLBindCol.

  • Если приложение подготавливает позиционированную инструкцию обновления или удаления, это необходимо сделать после вызова SQLFetch или SQLFetchScroll. Хотя библиотека курсоров отправляет инструкцию драйверу для подготовки, она закрывает инструкцию и выполняет ее непосредственно при вызове SQLExecute приложения.

  • Если драйвер поддерживает только одну активную инструкцию, библиотека курсоров извлекает остальную часть результирующий набор, а затем возвращает текущий набор строк из кэша, прежде чем он выполнит позиционированное обновление или удаление инструкции. Если приложение вызывает функцию, которая возвращает метаданные в результирующем наборе (например, SQLNumResultCols или SQLDescribeCol), библиотека курсоров возвращает ошибку.

  • Если позиционированные инструкции обновления или удаления выполняются в столбце таблицы, включающей столбец метки времени, который автоматически обновляется при каждом выполнении обновления, все последующие операторы обновления или удаления завершаются ошибкой, если столбец метки времени привязан. Это происходит из-за того, что поиск по обновлению или удалению инструкции, которую создает библиотека курсоров, не будет точно определять строку для обновления. Значение в инструкции поиска для столбца метки времени не будет соответствовать автоматически обновленному значению столбца метки времени.