Construction d'instructions SQL pour les curseurs
S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)
Le pilote ODBC SQL Server Native Client utilise des curseurs serveur pour implémenter la fonctionnalité de curseur définie dans la spécification ODBC. Une application ODBC contrôle le comportement du curseur à l’aide de SQLSetStmtAttr pour définir différents attributs d’instruction. Voici les attributs et leurs valeurs par défaut.
Attribut | Default |
---|---|
SQL_ATTR_CONCURRENCY | SQL_CONCUR_READ_ONLY |
SQL_ATTR_CURSOR_TYPE | SQL_CURSOR_FORWARD_ONLY |
SQL_ATTR_CURSOR_SCROLLABLE | SQL_NONSCROLLABLE |
SQL_ATTR_CURSOR_SENSITIVITY | SQL_UNSPECIFIED |
SQL_ATTR_ROW_ARRAY_SIZE | 1 |
Lorsque ces options sont définies sur leurs valeurs par défaut au moment de l’exécution d’une instruction SQL, le pilote ODBC SQL Server Native Client n’utilise pas de curseur serveur pour implémenter le jeu de résultats ; à la place, il utilise un jeu de résultats par défaut. Si l’une de ces options est modifiée par rapport à ses valeurs par défaut au moment de l’exécution d’une instruction SQL, le pilote ODBC SQL Server Native Client tente d’utiliser un curseur serveur pour implémenter le jeu de résultats.
Les jeux de résultats par défaut prennent en charge toutes les instructions Transact-SQL. Il n'y a pas de restrictions concernant les types d'instructions SQL qui peuvent être exécutés lors de l'utilisation d'un jeu de résultats par défaut.
Les curseurs serveur ne prennent pas en charge toutes les instructions Transact-SQL. Les curseurs côté serveur ne prennent pas en charge les instructions SQL qui génèrent plusieurs jeux de résultats.
Les types d'instructions suivants ne sont pas pris en charge par les curseurs côté serveur :
Lots
Les instructions SQL construites à partir de plusieurs instructions SQL SELECT individuelles, par exemple :
SELECT * FROM Authors; SELECT * FROM Titles
Procédures stockées avec plusieurs instructions SELECT
Instructions SQL qui exécutent une procédure stockée contenant plusieurs instructions SELECT. Cela inclut les instructions SELECT qui remplissent des paramètres ou des variables.
Mots clés
Instructions SQL contenant les mots clés FOR BROWSE ou INTO.
Dans SQL Server, si une instruction SQL qui correspond à l’une de ces conditions est exécutée avec un curseur serveur, le curseur du serveur est implicitement converti en jeu de résultats par défaut. Une fois que SQLExecDirect ou SQLExecute a retourné SQL_SUCCESS_WITH_INFO, les attributs de curseur sont rétablis sur leurs paramètres par défaut.
Les instructions SQL qui n'appartiennent à aucune des catégories précitées peuvent être exécutées avec tout paramètre d'attribut d'instruction ; elles fonctionnent aussi bien avec un jeu de résultats par défaut qu'avec un curseur côté serveur.
Erreurs
Dans SQL Server 7.0 et versions ultérieures, une tentative d’exécution d’une instruction qui produit plusieurs jeux de résultats génère SQL_SUCCESS_WITH INFO et le message suivant :
SqlState: 01S02"
pfNative: 0
szErrorMsgString: "[Microsoft][SQL Server Native Client][SQL Server]
Cursor type changed."
Les applications ODBC qui reçoivent ce message peuvent appeler SQLGetStmtAttr pour déterminer les paramètres de curseur actuels.
Toute tentative d'exécution d'une procédure avec plusieurs instructions SELECT lors de l'utilisation de curseurs côté serveur génère l'erreur suivante :
SqlState: 42000
pfNative: 16937
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]
A server cursor is not allowed on a stored procedure
with more than one SELECT statement in it. Use a
default result set or client cursor.
Toute tentative d'exécution d'un lot avec plusieurs instructions SELECT lors de l'utilisation de curseurs côté serveur génère l'erreur suivante :
SqlState: 42000
pfNative: 16938
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]
sp_cursoropen. The statement parameter can only
be a single SELECT statement or a single stored
procedure.
Les applications ODBC qui reçoivent ces erreurs doivent réinitialiser tous les attributs d'instructions de curseur à leurs valeurs par défaut avant d'essayer d'exécuter l'instruction.
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour