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


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

Применимо к:SQL ServerAzure SQL DatabaseAzure Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

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

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

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

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

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

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

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

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

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

См. также

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