Liaison de paramètres par nom (paramètres nommés)

Certaines SGBD permettent à une application de spécifier les paramètres d’une procédure stockée par nom au lieu d’une position dans l’appel de procédure. Ces paramètres sont appelés paramètres nommés. ODBC prend en charge l’utilisation de paramètres nommés. Dans ODBC, les paramètres nommés sont utilisés uniquement dans les appels aux procédures stockées et ne peuvent pas être utilisés dans d’autres instructions SQL.

Le pilote case activée la valeur du champ SQL_DESC_UNNAMED de l’IPD pour déterminer si les paramètres nommés sont utilisés. Si SQL_DESC_UNNAMED n’est pas défini sur SQL_UNNAMED, le pilote utilise le nom dans le champ SQL_DESC_NAME de l’IPD pour identifier le paramètre. Pour lier le paramètre, une application peut appeler SQLBindParameter pour spécifier les informations de paramètre, puis appeler SQLSetDescField pour définir le champ SQL_DESC_NAME de l’IPD. Lorsque des paramètres nommés sont utilisés, l’ordre du paramètre dans l’appel de procédure n’est pas important et le numéro d’enregistrement du paramètre est ignoré.

La différence entre les paramètres non nommés et les paramètres nommés se trouve dans la relation entre le numéro d’enregistrement du descripteur et le numéro de paramètre dans la procédure. Lorsque des paramètres non nommés sont utilisés, le premier marqueur de paramètre est lié au premier enregistrement du descripteur de paramètre, qui à son tour est lié au premier paramètre (dans l’ordre de création) dans l’appel de procédure. Lorsque des paramètres nommés sont utilisés, le premier marqueur de paramètre est toujours lié au premier enregistrement du descripteur de paramètre, mais la relation entre le numéro d’enregistrement du descripteur et le numéro de paramètre dans la procédure n’existe plus. Les paramètres nommés n’utilisent pas le mappage du numéro d’enregistrement du descripteur à la position des paramètres de procédure ; Au lieu de cela, le nom de l’enregistrement du descripteur est mappé au nom du paramètre de procédure.

Remarque

Si la population automatique de l’IPD est activée, le pilote remplit le descripteur afin que l’ordre des enregistrements de descripteur corresponde à l’ordre des paramètres dans la définition de procédure, même si les paramètres nommés sont utilisés.

Si un paramètre nommé est utilisé, tous les paramètres doivent être nommés. Si un paramètre n’est pas un paramètre nommé, aucun des paramètres ca ne soit nommé. S’il y avait un mélange de paramètres nommés et de paramètres non nommés, le comportement dépendrait du pilote.

Comme exemple de paramètres nommés, supposons qu’une procédure stockée SQL Server a été définie comme suit :

CREATE PROCEDURE test @title_id int = 1, @quote char(30) AS <blah>  

Dans cette procédure, le premier paramètre, @title_ida la valeur par défaut 1. Une application peut utiliser le code suivant pour appeler cette procédure de telle sorte qu’elle spécifie un seul paramètre dynamique. Ce paramètre est un paramètre nommé portant le nom « @quote ».

// Prepare the procedure invocation statement.  
SQLPrepare(hstmt, "{call test(?)}", SQL_NTS);  
  
// Populate record 1 of ipd.  
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,  
                  30, 0, szQuote, 0, &cbValue);  
  
// Get ipd handle and set the SQL_DESC_NAMED and SQL_DESC_UNNAMED fields  
// for record #1.  
SQLGetStmtAttr(hstmt, SQL_ATTR_IMP_PARAM_DESC, &hIpd, 0, 0);  
SQLSetDescField(hIpd, 1, SQL_DESC_NAME, "@quote", SQL_NTS);  
  
// Assuming that szQuote has been appropriately initialized,  
// execute.  
SQLExecute(hstmt);