Curseurs dynamiques (moteur de base de données)

Les curseurs dynamiques sont le contraire des curseurs statiques. Les curseurs dynamiques reflètent toutes les modifications apportées aux lignes de leur jeu de résultats lorsque vous les parcourez. Les valeurs des données, l'ordre et l'appartenance des lignes du jeu de résultats peuvent changer à chaque extraction. Toutes les instructions UPDATE, INSERT et DELETE émises par l'ensemble des utilisateurs sont visibles à l'aide du curseur. Les mises à jour sont visibles immédiatement si elles ont été effectuées à l'aide du curseur, soit au moyen d'une fonction API telle que SQLSetPos, soit au moyen de la clause WHERE CURRENT OF Transact-SQL. Les mises à jour effectuées en dehors du curseur ne sont pas visibles tant qu'elles n'ont pas été validées, à moins que le niveau d'isolement d'une transaction de curseur soit paramétré pour permettre la lecture des données non validées.

Les plans de curseurs dynamiques n'utilisent jamais d'index spatiaux.

Notes

Si le plan choisi pour l'exécution d'une requête pour un curseur dynamique utilise une analyse de segment de mémoire et si les conditions sont telles qu'un verrou de page ou de table est acquis, la suppression d'une ligne peut entraîner la désallocation d'une page entière. Dans ce cas, les marqueurs utilisés par les curseurs dynamiques à des fins de positionnement peuvent perdre leur validité et une extraction ultérieure à partir du curseur peut échouer et retourner l'erreur 16931. Pour résoudre le problème, créez un index cluster sur la table, utilisez un autre type de curseur ou envisagez la possibilité d'empêcher l'acquisition de verrous de page et de table.

Notes

Dans SQL Server, les mises à jour des tables de travail de curseur dynamique sont toujours en place. Même si les colonnes de clés sont modifiées dans le cadre de la mise à jour, la ligne active est actualisée. Dans SQL Server 2000, la ligne active était marquée comme supprimée (comme elle l'aurait été pour les curseurs pilotés par jeux de clés non en place), mais n'était pas insérée à la fin de la table de travail (comme elle l'était pour les curseurs pilotés par jeux de clés). Par conséquent, l'actualisation du curseur ne trouvait pas la ligne et la renseignait comme manquante. SQL Server assure la synchronisation de la table de travail du curseur, et l'actualisation peut ainsi trouver la ligne parce qu'elle dispose des nouvelles clés.