Traitement des instructions de mise à jour et de suppression positionnées
Important
Cette fonctionnalité sera supprimée dans une version future de Windows. Évitez d’utiliser cette fonctionnalité dans les nouveaux travaux de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Microsoft recommande d’utiliser la fonctionnalité de curseur du pilote.
La bibliothèque de curseurs prend en charge les instructions de mise à jour et de suppression positionnées en remplaçant la clause WHERE CURRENT OF dans ces instructions par une clause WHERE qui énumère les valeurs stockées dans son cache pour chaque colonne liée. La bibliothèque de curseurs transmet les instructions UPDATE et DELETE nouvellement créées au pilote pour l’exécution. Pour les instructions de mise à jour positionnées, la bibliothèque de curseurs met ensuite à jour son cache à partir des valeurs des mémoires tampons de l’ensemble de lignes et définit la valeur correspondante dans le tableau d’état des lignes sur SQL_ROW_UPDATED. Pour les instructions de suppression positionnées, il définit la valeur correspondante dans le tableau d’état des lignes sur SQL_ROW_DELETED.
Attention
La clause WHERE construite par la bibliothèque de curseurs pour identifier la ligne actuelle peut échouer à identifier des lignes, à identifier une autre ligne ou à identifier plusieurs lignes. Pour plus d’informations, consultez Construction d’instructions recherchées, plus loin dans cette annexe.
Les instructions de mise à jour et de suppression positionnées sont soumises aux restrictions suivantes :
Les instructions de mise à jour et de suppression positionnées ne peuvent être utilisées que dans les cas suivants : lorsqu’une instruction SELECT a généré le jeu de résultats ; lorsque l’instruction SELECT ne contenait pas de jointure, de clause UNION ou de clause GROUP BY ; et lorsque les colonnes qui utilisaient un alias ou une expression dans la liste de sélection n’étaient pas liées à SQLBindCol.
Si une application prépare une instruction de mise à jour ou de suppression positionnée, elle doit le faire après avoir appelé SQLFetch ou SQLFetchScroll. Bien que la bibliothèque de curseurs envoie l’instruction au pilote pour la préparation, elle ferme l’instruction et l’exécute directement lorsque l’application appelle SQLExecute.
Si le pilote ne prend en charge qu’une seule instruction active, la bibliothèque de curseurs extrait le reste du jeu de résultats, puis refétise l’ensemble de lignes actuel de son cache avant d’exécuter une instruction de mise à jour ou de suppression positionnée. Si l’application appelle ensuite une fonction qui retourne des métadonnées dans un jeu de résultats (par exemple, SQLNumResultCols ou SQLDescribeCol), la bibliothèque de curseurs retourne une erreur.
Si une instruction de mise à jour ou de suppression positionnée est effectuée sur une colonne d’une table qui comprend une colonne timestamp qui est automatiquement mise à jour chaque fois qu’une mise à jour est effectuée, toutes les instructions de mise à jour ou de suppression positionnées suivantes échouent si la colonne timestamp est liée. Cela se produit parce que l’instruction de mise à jour ou de suppression recherchée créée par la bibliothèque de curseurs n’identifie pas avec précision la ligne à mettre à jour. La valeur dans l’instruction recherchée pour la colonne timestamp ne correspond pas à la valeur automatiquement mise à jour de la colonne timestamp.