Partage via


Paramètres de commande

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

Télécharger le pilote OLE DB

Les paramètres sont marqués dans le texte de la commande avec le caractère de point d'interrogation. Par exemple, l'instruction SQL suivante est marquée pour un paramètre d'entrée unique :

{call SalesByCategory('Produce', ?)}  

Pour améliorer les performances en réduisant le trafic réseau, le pilote OLE DB pour SQL Server ne dérive pas automatiquement les informations de paramètre, à moins que ICommandWithParameters::GetParameterInfo ou ICommandPrepare::Prepare ne soit appelé avant d’exécuter une commande. Cela signifie qu’OLE DB Driver pour SQL Server n’effectue pas automatiquement les opérations suivantes :

  • La vérification de ce que le type de données spécifié avec ICommandWithParameters::SetParameterInfo est correct.

  • Mappage du DBTYPE spécifié dans les informations de liaison d'accesseur au type de données SQL Server correct pour le paramètre.

Les applications recevront des erreurs ou présenteront une perte de précision avec l'une ou l'autre de ces méthodes si elles spécifient des types de données qui ne sont pas compatibles avec le type de données SQL Server du paramètre.

Pour éviter cela, l'application doit :

  • vérifier que pwszDataSourceType correspond au type de données SQL Server pour le paramètre en cas de codage en dur de ICommandWithParameters::SetParameterInfo.

  • s'assurer que la valeur DBTYPE qui est liée au paramètre est du même type que le type de données SQL Server pour le paramètre en cas de codage effectué de manière irréversible d'un accesseur ;

  • coder l’application de façon à appeler ICommandWithParameters::GetParameterInfo afin que le fournisseur puisse obtenir dynamiquement les types de données SQL Server des paramètres. Notez que cela provoque une boucle réseau supplémentaire au serveur.

Notes

Le fournisseur ne prend pas en charge l’appel à ICommandWithParameters::GetParameterInfo pour les instructions UPDATE ou DELETE SQL Server contenant une clause FROM ; pour les instructions SQL qui dépendent d’une sous-requête contenant des paramètres ; pour les instructions SQL contenant des marqueurs de paramètre dans les deux expressions d’un prédicat de comparaison, like ou quantifié ; ou les requêtes dans lesquelles un des paramètres est un paramètre d’une fonction. Lors du traitement d’un lot d’instructions SQL, le fournisseur ne prend pas non plus en charge l’appel à ICommandWithParameters::GetParameterInfo pour les marqueurs de paramètre dans les instructions après la première instruction du lot. Les commentaires (/* */) ne sont pas autorisés dans la commande Transact-SQL.

OLE DB Driver pour SQL Server prend en charge les paramètres d'entrée dans les commandes d'instruction SQL. Sur les commandes d'appel de procédure, OLE DB Driver pour SQL Server prend en charge les paramètres d'entrée, de sortie et d'entrée/sortie. Les valeurs de paramètre de sortie sont retournées à l'application lors de l'exécution (uniquement si aucun ensemble de lignes n'est retourné) ou lorsque tous les ensembles de lignes retournés sont épuisés par l'application. Pour garantir que les valeurs retournées sont valides, utilisez IMultipleResults pour forcer la consommation de l’ensemble de lignes.

Les noms des paramètres de procédure stockée n'ont pas besoin d'être spécifiés dans une structure DBPARAMBINDINFO. Utilisez NULL pour la valeur du membre pwszName afin d’indiquer que le pilote OLE DB pour SQL Server doit ignorer le nom du paramètre et utiliser seulement l’ordinal spécifié dans le membre rgParamOrdinals de ICommandWithParameters::SetParameterInfo. Si le texte de la commande contient à la fois des paramètres nommés et sans nom, tous les paramètres sans nom doivent être spécifiés avant les paramètres nommés.

Si le nom d’un paramètre de procédure stockée est spécifié, le pilote OLE DB pour SQL Server vérifie la validité du nom. OLE DB Driver pour SQL Server retourne une erreur lorsqu'il reçoit un nom de paramètre erroné du consommateur.

Notes

Pour exposer la prise en charge des types XML SQL Server et des types définis par l’utilisateur, le pilote OLE DB pour SQL Server implémente une nouvelle interface ISSCommandWithParameters.

Voir aussi

Commandes