Traitement des résultats (ODBC)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Une fois qu’une application envoie une instruction SQL, SQL Server retourne toutes les données résultantes sous la forme d’un ou plusieurs jeux de résultats. Un jeu de résultats est un ensemble de lignes et colonnes qui correspondent aux critères de la requête. Les instructions SELECT, les fonctions de catalogue et certaines procédures stockées produisent un jeu de résultats sous forme de tableau, accessible par une application. Si l'instruction SQL exécutée est une procédure stockée, un lot contenant plusieurs commandes ou une instruction SELECT avec des mots clés, il y aura plusieurs jeux de résultats à traiter.

Les fonctions de catalogue ODBC peuvent aussi récupérer les données. Par exemple, SQLColumns récupère des données sur les colonnes de la source de données. Ces jeux de résultats peuvent contenir zéro ou plusieurs lignes.

D'autres instructions SQL, telles que GRANT ou REVOKE, ne retournent pas de jeux de résultats. Pour ces instructions, le code de retour de SQLExecute ou SQLExecDirect est généralement la seule indication que l’instruction a réussi.

Chaque instruction INSERT, UPDATE et DELETE retourne un jeu de résultats qui contient uniquement le nombre de lignes concernées par la modification. Ce nombre est rendu disponible lorsque l’application appelle SQLRowCount. ODBC 3.Les applications x doivent appeler SQLRowCount pour récupérer le jeu de résultats ou SQLMoreResults pour l’annuler. Lorsqu’une application exécute un lot ou une procédure stockée contenant plusieurs instructions INSERT, UPDATE ou DELETE, le jeu de résultats de chaque instruction de modification doit être traité à l’aide de SQLRowCount ou annulé à l’aide de SQLMoreResults. Ces nombres peuvent être annulés en incluant une instruction SET NOCOUNT ON dans le lot ou la procédure stockée.

Transact-SQL inclut l'instruction SET NOCOUNT. Lorsque l’option NOCOUNT est activée, SQL Server ne retourne pas le nombre de lignes affectées par une instruction et SQLRowCount retourne 0. La version du pilote ODBC SQL Server Native Client introduit une option SQLGetStmtAttr spécifique au pilote, SQL_SOPT_SS_NOCOUNT_STATUS, pour signaler si l’option NOCOUNT est activée ou désactivée. Chaque fois que SQLRowCount retourne 0, l’application doit tester SQL_SOPT_SS_NOCOUNT_STATUS. Si SQL_NC_ON est retourné, la valeur 0 de SQLRowCount indique uniquement que SQL Server n’a pas retourné de nombre de lignes. Si SQL_NC_OFF est retourné, cela signifie que NOCOUNT est désactivé et que la valeur 0 de SQLRowCount indique que l’instruction n’a pas affecté de lignes. Les applications ne doivent pas afficher la valeur de SQLRowCount lorsque SQL_SOPT_SS_NOCOUNT_STATUS est SQL_NC_OFF. Comme les lots ou procédures stockées importants peuvent contenir plusieurs instructions SET NOCOUNT, les programmeurs ne peuvent pas en déduire que SQL_SOPT_SS_NOCOUNT_STATUS demeure constant. L’option doit être testée chaque fois que SQLRowCount retourne 0.

Plusieurs autres instructions Transact-SQL retournent leurs données dans des messages plutôt que dans des jeux de résultats. Lorsque le pilote ODBC SQL Server Native Client reçoit ces messages, il retourne SQL_SUCCESS_WITH_INFO pour informer l’application que les messages d’information sont disponibles. L’application peut ensuite appeler SQLGetDiagRec pour récupérer ces messages. Les instructions Transact-SQL qui fonctionnent de cette façon sont les suivantes :

  • DBCC

  • SET SHOWPLAN (disponible avec les versions antérieures de SQL Server)

  • SET STATISTICS

  • PRINT

  • RAISERROR

Le pilote ODBC SQL Server Native Client retourne SQL_ERROR sur un RAISERROR avec une gravité de 11 ou supérieure. Si la gravité de RAISERROR est supérieure ou égale à 19, la connexion est également abandonnée.

Pour traiter les jeux de résultats à partir d’une instruction SQL, l’application :

  • détermine les caractéristiques du jeu de résultats ;

  • lie les colonnes aux variables de programme ;

  • extrait une valeur unique, une ligne entière de valeurs ou plusieurs lignes de valeurs ;

  • effectue un test pour voir s'il y a plusieurs jeux de résultats, et si tel est le cas, effectue une nouvelle boucle pour déterminer les caractéristiques du nouveau jeu de résultats.

Le processus de récupération des lignes de la source de données et leur renvoi à l'application est appelé extraction.

Dans cette section

Voir aussi

SQL Server Native Client (ODBC)
Rubriques de procédure de traitement des résultats (ODBC)