Partager via


SQLPrepare

Le pilote ODBC SQL Server Native Client crée une procédure stockée temporaire à partir d'instructions SQL préparées. Les procédures stockées sont une méthode efficace pour exécuter plusieurs fois une instruction, mais la création d'une procédure stockée est plus coûteuse que l'exécution d'une instruction simple. D'une manière générale, envisagez d'utiliser SQLPrepare et SQLExecute si l'application doit soumettre plus de trois fois une instruction SQL.

[!REMARQUE]

SQL Server prend en charge le modèle préparation/exécution d'ODBC. La discussion relative à SQLPrepare/SQLExecute ne s'applique qu'aux versions de SQL Server antérieures à la version 7.0.

Une procédure stockée temporaire créée par SQLPrepare est nommée **#odbc#**identifiant_utilisateur, où identifiant_utilisateur est formé d'au plus six caractères du nom d'utilisateur concaténés avec jusqu'à huit chiffres qui identifient la procédure.

SQLPrepare crée la procédure stockée temporaire si toutes les valeurs de paramètres ont été liées ou si l'instruction SQL ne contient pas de paramètres. SQLExecute crée la procédure si aucun des paramètres n'était pas lié au moment de l'appel de SQLPrepare.

SQLPrepare peut créer des procédures stockées plus efficacement que SQLExecute. Nous vous recommandons par ailleurs d'utiliser SQLBindParameter pour lier des variables de paramètres avant d'appeler SQLPrepare.

Si l'instruction CREATE PROCEDURE utilisée pour générer une procédure stockée temporaire retourne une erreur, SQLPrepare ou SQLExecute soumet l'instruction à SQL Server avec l'option SET NOEXEC ou SET PARSEONLY activée (selon le type d'instruction). SQL Server vérifie la syntaxe de l'instruction et retourne toute erreur.

SQLExecute peut retourner toute erreur ODBC SQLSTATE et toute erreur SQL Server qui peut être retournée par SQLPrepare.

Le pilote ODBC SQL Server Native Client crée une procédure stockée temporaire si les valeurs InputOutputType, ParameterType, ColumnSize ou DecimalDigits sont altérées dans les appels à SQLBindParameter sur une instruction préparée. Une procédure stockée temporaire n'est pas créée lorsque les paramètres liés pointent vers sur les nouvelles mémoires tampons dans la mémoire client, la longueur de la mémoire client est modifiée ou le pointeur vers la valeur de longueur ou d'indicateur du paramètre est altérée.

Si une connexion ne parvient pas à créer une procédure stockée pour toute raison (comme l'absence d'autorisation), le pilote ODBC SQL Server Native Client n'utilise pas de procédure stockée mais, à la place, soumet l'instruction SQL chaque fois que SQLExecute est appelé.

Par défaut, le pilote ODBC SQL Server Native Client supprime les procédures stockées temporaires lorsque la connexion est interrompue (SQLDisconnect est appelé pour la connexion). Cela peut poser des problèmes si la connexion est supposée rester indéfiniment ouverte. Ce comportement par défaut peut être modifié à l'aide de l'option de connexion SQL_USE_PROCEDURE_FOR_PREPARE spécifique au pilote.

[!REMARQUE]

Si SET NOCOUNT ON a été exécuté, plusieurs instructions incorporées dans une procédure stockée ne créent pas plusieurs jeux de résultats comme elles devraient. Les nombres de lignes générés par les instructions SQL au sein d'une procédure stockée sont ignorés par le pilote.

Voir aussi

Concepts

Autres ressources