Share via


Cursores dinámicos (motor de base de datos)

Los cursores dinámicos son los contrario a los cursores estáticos. Reflejan todas las modificaciones realizadas en las filas de su conjunto de resultados al desplazarse por el cursor. Los valores de datos, el orden y la pertenencia de las filas del conjunto de resultados pueden cambiar con cada recuperación. Todas las instrucciones UPDATE, INSERT y DELETE que realizan todos los usuarios son visibles a través del cursor. Las actualizaciones se muestran inmediatamente si se realizan a través del cursor mediante una función API, como SQLSetPos o la cláusula WHERE CURRENT OF de Transact-SQL. Las actualizaciones realizadas fuera del cursor no son visibles hasta que se confirman, a menos que el nivel de aislamiento de transacción del cursor sea de lectura no confirmada.

Los planes del cursor dinámicos nunca utilizan los índices espaciales.

Nota

Si el plan de ejecución seleccionado para una consulta de un cursor dinámico utiliza un recorrido de montón, y de acuerdo con las condiciones se adquiere un bloqueo de página o tabla, la eliminación de una fila puede hacer que se cancele la asignación de toda la página. En este caso, puede que los marcadores utilizados por los cursores dinámicos para las posiciones dejen de ser válidos y una recuperación posterior del cursor provoque el error 16931. Algunas soluciones son crear un índice agrupado en la tabla, utilizar otro tipo de cursor o evaluar si se pueden impedir los bloqueos en páginas y tablas.

Nota

En SQL Server, las actualizaciones de tablas de trabajo de cursor dinámico siempre están en contexto. Es decir, aunque se cambien columnas de clave como parte de la actualización, la fila actual se actualizará. En SQL Server 2000, se marcaba como eliminada la fila actual (al igual que habría ocurrido con los cursores de conjunto de claves fuera de contexto), pero no se insertaba la fila al final de la tabla de trabajo (al igual que con los cursores de conjunto de claves). Como consecuencia, la actualización de cursores no encontraba la fila e informaba de su ausencia. SQL Server 2005 mantiene sincronizadas las tabla de trabajo de cursores y la actualización puede encontrar la fila porque dispone de las nuevas claves.