Traitement des instructions de mise à jour et de suppression positionnées

Important

Cette fonctionnalité sera supprimée dans une prochaine version de Windows. Évitez d’utiliser cette fonctionnalité dans le nouveau travail 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 supporte les instructions positionnées mise à jour et suppression 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 and DELETE nouvellement construites UPDATE au pilote pour exécution. Pour les instructions de mise à jour positionnées, la bibliothèque de curseurs met alors à jour son cache à partir des valeurs des tampons de lignes et fixe la valeur correspondante dans le tableau d’état des lignes à SQL_ROW_UPDATED. Pour les instructions delete positionnées, la valeur correspondante dans le tableau d’état des lignes est SQL_ROW_DELETED.

Caution

La clause WHERE construite par la bibliothèque de curseurs pour identifier la ligne courante peut ne pas identifier de lignes, identifier une ligne différente, ou en identifier plusieurs. Pour plus d’informations, voir Construction des Énoncés Consultés, plus loin dans cette annexe.

Les instructions de mise à jour et de suppression positionnées sont soumises aux restrictions suivantes :

  • Les instructions mises à jour et suppressions positionnées ne peuvent être utilisées que dans les cas suivants : lorsqu’une instruction SELECT génère l’ensemble de résultats ; lorsque l’instruction SELECT ne contenait pas de jointure, de clause UNION ou de clause GROUP BY ; et lorsque des colonnes utilisant un alias ou une expression dans la liste de sélection n’étaient pas liées à SQLBindCol.

  • Si une application prépare une instruction mise à jour ou suppression positionnée, elle doit le faire après avoir appelé SQLFetch ou SQLFetchScroll. Bien que la bibliothèque de curseurs soumette l’instruction au pilote pour préparation, elle ferme l’instruction et l’exécute directement lorsque l’application appelle SQLExecute.

  • Si le pilote ne supporte qu’une seule instruction active, la bibliothèque de curseurs récupère le reste de l’ensemble de résultats puis récupère le jeu de lignes courant depuis son cache avant d’exécuter une instruction de mise à jour ou de suppression positionnée. Si l’application appelle alors une fonction qui renvoie des métadonnées dans un ensemble de résultats (par exemple, SQLNumResultCols ou SQLDescribeCol), la bibliothèque de curseurs renvoie une erreur.

  • Si une instruction mise à jour ou suppression positionnée est effectuée sur une colonne d’un tableau qui inclut une colonne d’horodatage qui est automatiquement mise à jour à chaque mise à jour, toutes les instructions de mise à jour ou de suppression positionnées suivantes échoueront si la colonne d’horodatage 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 horodatage ne correspondra pas à la valeur mise à jour automatique de la colonne horodatage.