Utilisation de jeux de résultats SQL Server par défaut
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Les attributs de curseur ODBC par défaut sont les suivants :
SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, SQL_CURSOR_FORWARD_ONLY, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, SQL_CONCUR_READ_ONLY, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, 1, SQL_IS_INTEGER);
Chaque fois que ces attributs sont définis sur leurs valeurs par défaut, le pilote ODBC SQL Server Native Client utilise un jeu de résultats par défaut SQL Server. Les jeux de résultats par défaut peuvent être utilisés pour n’importe quelle instruction SQL prise en charge par SQL Server et sont la méthode la plus efficace pour transférer un jeu de résultats entier vers le client.
SQL Server 2005 (9.x) a introduit la prise en charge de plusieurs jeux de résultats actifs (MARS) ; les applications peuvent désormais avoir plusieurs jeux de résultats actifs par défaut par connexion. MARS n'est pas activé par défaut.
Avant SQL Server 2005 (9.x), les jeux de résultats par défaut ne prenaient pas en charge plusieurs instructions actives sur la même connexion. Une fois qu’une instruction SQL est exécutée sur une connexion, le serveur n’accepte pas les commandes (à l’exception d’une demande d’annulation du reste du jeu de résultats) du client sur cette connexion jusqu’à ce que toutes les lignes du jeu de résultats aient été traitées. Pour annuler le reste d’un jeu de résultats partiellement traité, appelez SQLCloseCursor ou SQLFreeStmt avec le paramètre fOption défini sur SQL_CLOSE. Pour terminer un jeu de résultats partiellement traité et tester la présence d’un autre jeu de résultats, appelez SQLMoreResults. Si une application ODBC tente une commande sur un handle de connexion avant qu’un jeu de résultats par défaut ait été complètement traité, l’appel génère SQL_ERROR et un appel à SQLGetDiagRec retourne :
szSqlState: "HY000", pfNativeError: 0
szErrorMsg: "[Microsoft][SQL Server Native Client]
Connection is busy with results for another hstmt."