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


Обновление данных в курсорах SQL Server

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

Скачать драйвер OLE DB

При получении и обновлении данных с помощью курсоров SQL Server драйвер OLE DB для клиентского приложения SQL Server связан с теми же рекомендациями и ограничениями, которые применяются к любому другому клиентскому приложению.

Только строки в курсорах SQL Server участвуют в параллельном управлении доступом к данным. Когда потребитель запрашивает изменяемый набор строк, управление параллелизмом осуществляется свойством DBPROP_LOCKMODE. Чтобы изменить уровень управления параллельным доступом, потребитель устанавливает свойство DBPROP_LOCKMODE до того, как открывает набор строк.

Уровни изоляции транзакции могут вызвать значительные задержки при позиционировании строк, если клиентское приложение оставляет транзакции долгое время открытыми. По умолчанию драйвер OLE DB для SQL Server использует уровень изоляции READ COMMITTED, указанный с помощью свойства DBPROPVAL_TI_READCOMMITTED. OLE DB Driver for SQL Server поддерживает изоляцию чтения "грязных" данных, если параллелизм набора строк находится в режиме только для чтения. Поэтому потребитель может запросить более высокий уровень изоляции в изменяемом наборе строк, но не может успешно запросить более низкий уровень.

Режимы немедленного и отложенного обновления

В режиме немедленного обновления каждый вызов IRowsetChange::SetData вызывает циклический переход к SQL Server. Если потребитель выполняет несколько изменений в одной строке, эффективнее будет осуществить все изменения в одном вызове функции SetData.

В режиме отложенного обновления в SQL Server выполняется циклический обход для каждой строки, указанной в параметрах cRows и rghRows iRowsetUpdate::Update.

В каждом режиме обмен данными представляет отдельную транзакцию, если для набора строк отсутствует открытый объект транзакции.

При использовании метода IRowsetUpdate::Update OLE DB Driver for SQL Server пытается обработать каждую указанную строку. Ошибка, происходящая из-за недопустимых данных, длины или значений состояния для каждой строки, не останавливает эту обработку. Можно изменить все строки, участвующие в обновлении, или ни одной. Потребитель должен изучить возращенный массив prgRowStatus, чтобы определить ошибку для каждой конкретной строки, если драйвер OLE DB для SQL Server возвращает DB_S_ERRORSOCCURRED.

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

См. также

Обновление данных в наборах строк