Compartir a través de


Actualización de datos en cursores de SQL Server en SQL Server Native Client

Se aplica a: SQL Server Azure SQL Database Azure SQL Instancia administrada Azure Synapse Analytics Analytics Platform System (PDW)

Al capturar y actualizar datos a través de cursores de SQL Server, una aplicación de consumidor del proveedor OLE DB de SQL Server Native Client está enlazada por las mismas consideraciones y restricciones que se aplican a cualquier otra aplicación cliente.

Solo las filas de cursores de SQL Server participan en el control del acceso simultáneo a datos. Cuando el consumidor solicita un conjunto de filas modificable, DBPROP_LOCKMODE controla el control de simultaneidad. Para modificar el nivel de control de acceso simultáneo, el consumidor establece la propiedad DBPROP_LOCKMODE antes de abrir el conjunto de filas.

Los niveles de aislamiento de las transacciones pueden producir diferencias significativas en la posición de las filas si el diseño de la aplicación cliente permite que las transacciones permanezcan abiertas durante largos períodos de tiempo. De forma predeterminada, el proveedor OLE DB de SQL Server Native Client usa el nivel de aislamiento de lectura confirmada especificado por DBPROPVAL_TI_READCOMMITTED. El proveedor OLE DB de SQL Server Native Client admite el aislamiento de lectura sucio cuando la simultaneidad del conjunto de filas es de solo lectura. Por consiguiente, el consumidor puede solicitar un nivel superior de aislamiento en un conjunto de filas modificable pero no puede solicitar con éxito un nivel inferior.

Modos de actualización inmediata y retrasada

En el modo de actualización inmediata, cada llamada a IRowsetChange::SetData produce un recorrido de ida y vuelta a SQL Server. Si el consumidor realiza varios cambios en una única fila, resulta más eficaz enviar todos los cambios con una única llamada a SetData.

En el modo de actualización retrasada, se realiza un recorrido de ida y vuelta a SQL Server para cada fila indicada en los parámetros cRows y rghRows de IRowsetUpdate::Update.

En ambos modos, un viaje de ida y vuelta representa una transacción distinta cuando no queda abierto ningún objeto de transacción para el conjunto de filas.

Cuando usa IRowsetUpdate::Update, el proveedor OLE DB de SQL Server Native Client intenta procesar cada fila indicada. Un error que se produce debido a los valores de datos, longitud o estado no válidos para cualquier fila no detiene el procesamiento del proveedor OLE DB de SQL Server Native Client. Se pueden modificar todas o ninguna de las demás filas que participan en la actualización. El consumidor debe examinar la matriz prgRowStatus devuelta para determinar el error de cualquier fila específica cuando el proveedor OLE DB de SQL Server Native Client devuelve DB_S_ERRORSOCCURRED.

Un consumidor no debe suponer que las filas se procesan en un orden determinado. Si un consumidor necesita el procesamiento ordenado de modificación de datos en más de una fila, debe establecer ese orden en la lógica de la aplicación y abrir una transacción para incluir en ella el proceso.

Consulte también

Actualizar datos en conjuntos de filas