@@CURSOR_ROWS |
Enregistrement de curseur |
|---|---|
| SQL Server | Microsoft SQL Server |
Syntaxe
| @@CURSOR_ROWS |
Description
Cette fonction permet de retourner le nombre de lignes qualifiées actuellement dans le dernier curseur ouvert sur la connexion. Pour améliorer les performances, SQL Server peut remplir de manière désynchronisé un ensemble de clefs volumineux et des curseurs statiques. @@CURSOR_ROWS peut être appelé pour déterminer que le nombre de lignes qualifiées pour un curseur est récupéré au moment de l'appel @@CURSOR_ROWS.
Remarques
- Indicateur du nombre de lignes disponibles dans le curseur : @@CURSOR_ROWS renvoie le nombre de lignes disponibles dans le curseur ouvert le plus récemment. Cette valeur est utile pour déterminer le nombre total d'enregistrements que le curseur peut parcourir sans avoir à effectuer une boucle complète. Elle permet ainsi une meilleure gestion des ressources et une optimisation du traitement.
- Différence entre curseurs statiques et dynamiques : Selon le type de curseur utilisé (statique, dynamique, clef unique,...), la valeur retournée par @@CURSOR_ROWS peut varier considérablement. Par exemple, pour un curseur dynamique, la valeur peut être -1, indiquant que le nombre de lignes n'est pas déterminé à l'avance. Cela doit être pris en compte lors de l'écriture de scripts dynamiques.
- Renvoie zéro si aucun curseur n'est ouvert : Si aucun curseur n'est ouvert au moment de l'appel à @@CURSOR_ROWS, la fonction renvoie la valeur 0. Il est donc important de vérifier que le curseur est bien déclaré et ouvert avant de s'appuyer sur la valeur retournée, sous peine d'interpréter incorrectement la situation.
- Utilité dans les scripts conditionnels ou de contrôle de flux : @@CURSOR_ROWS est souvent utilisée dans des structures conditionnelles (IF, WHILE) pour ajuster le comportement d'une STORED PROCEDURE en fonction du nombre de lignes à traiter. Cela permet d'éviter de faire des boucles inutiles ou de traiter des curseurs vides, ce qui améliore l'efficacité du code.
- Ne reflète pas toujours l'état final des données : La valeur de @@CURSOR_ROWS est établie au moment de l'ouverture du curseur. Si les données sous-jacentes changent (insertion, mise à jour, suppression) après l'ouverture, la valeur retournée ne sera pas forcément à jour. Cela peut poser des problèmes dans les environnements fortement concurrents.
- Peut retourner une valeur négative : Lorsque @@CURSOR_ROWS retourne une valeur négative, cela indique que le curseur est de type dynamique ou qu'il ne peut pas évaluer à l'avance le nombre de lignes. Une valeur de -1 est donc normale dans certains cas, mais doit être interprétée avec prudence dans les traitements logiques.
- Outil de diagnostic lors du développement : Lors du débogage ou du développement de procédures stockées, @@CURSOR_ROWS est un bon outil pour vérifier que les curseurs se comportent comme attendu. Elle permet de s'assurer que la requête sous-jacente a bien produit un ensemble de résultats, sans avoir à parcourir manuellement toutes les lignes.
- À ne pas confondre avec @@ROWCOUNT : @@CURSOR_ROWS et @@ROWCOUNT peuvent sembler similaires mais ils diffèrent radicalement : @@ROWCOUNT retourne le nombre de lignes affectées par la dernière instruction INSERT, UPDATE ou DELETE, tandis que @@CURSOR_ROWS concerne uniquement les lignes du curseur. Les confondre peut entraîner des erreurs logiques subtiles.
Dernière mise à jour : Jeudi, le 23 Septembre 2021