Actualizar datos en cursores de SQL Server
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Cuando se capturan y actualizan datos mediante cursores de SQL Server, las mismas consideraciones y restricciones que se aplican a cualquier otra aplicación cliente son válidas para una aplicación de consumidor de OLE DB Driver for SQL Server.
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 controlador OLE DB para SQL Server usa el nivel de aislamiento de lectura confirmada especificado por DBPROPVAL_TI_READCOMMITTED. OLE DB Driver for SQL Server admite el aislamiento de lectura de datos sucios 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 se usa IRowsetUpdate::Update, OLE DB Driver for SQL Server intenta procesar cada una de las filas indicadas. Cuando se produce un error debido a valores de datos, longitud o estado no válidos en cualquier fila, el procesamiento del controlador OLE DB para SQL Server no se detiene. 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 que se haya podido producir en una fila concreta cuando el controlador OLE DB para SQL Server 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.