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

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

При выборке и обновлении данных с помощью курсоров SQL Server приложение-потребитель OLE DB Driver for 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.

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

См. также:

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