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

Important

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

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

Caution

Клауза WHERE , построенная курсорной библиотекой для идентификации текущей строки, может не идентифицировать ни одну строку, ни другую строку, ни более одной строки. Для получения дополнительной информации см. раздел «Построение поисковых операторов» (Constructing Searched Statements) ниже в этом приложении.

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

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

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

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

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