Parametry vazby podle názvu (pojmenované parametry)

Některé dbMS umožňují aplikaci zadat parametry uložené procedury podle názvu místo pozice ve volání procedury. Tyto parametry se nazývají pojmenované parametry. ODBC podporuje použití pojmenovaných parametrů. V rozhraní ODBC se pojmenované parametry používají pouze při volání uložených procedur a nelze je použít v jiných příkazech SQL.

Ovladač zkontroluje hodnotu pole SQL_DESC_UNNAMED IPD a určí, jestli se používají pojmenované parametry. Pokud SQL_DESC_UNNAMED není nastavena na SQL_UNNAMED, ovladač použije název v poli SQL_DESC_NAME IPD k identifikaci parametru. Chcete-li svázat parametr, může aplikace volat SQLBindParameter k určení informací o parametru a pak může volat SQLSetDescField pro nastavení pole SQL_DESC_NAME v IPD. Při použití pojmenovaných parametrů není pořadí parametru ve volání procedury důležité a číslo záznamu parametru se ignoruje.

Rozdíl mezi nepojmenovanými parametry a pojmenovanými parametry je ve vztahu mezi číslem záznamu popisovače a číslem parametru v postupu. Při použití nepojmenovaných parametrů se první značka parametru vztahuje k prvnímu záznamu v popisovači parametru, který se zase vztahuje k prvnímu parametru (v pořadí vytvoření) ve volání procedury. Při použití pojmenovaných parametrů se první značka parametru stále vztahuje k prvnímu záznamu popisovače parametru, ale vztah mezi číslem záznamu popisovače a číslem parametru v postupu již neexistuje. Pojmenované parametry nepoužívají mapování čísla záznamu popisovače na pozici parametru procedury; místo toho je název záznamu popisovače mapován na název parametru procedury.

Poznámka:

Pokud je povolena automatická populace IPD, ovladač naplní popisovač tak, aby pořadí záznamů popisovače odpovídalo pořadí parametrů v definici procedury, i když se používají pojmenované parametry.

Pokud se použije pojmenovaný parametr, musí být všechny parametry pojmenované. Pokud některý z parametrů není pojmenovaný parametr, pak žádný z parametrů nemůže mít název parametry. Pokud by existovala kombinace pojmenovaných parametrů a nepojmenovaných parametrů, chování by bylo závislé na ovladači.

Předpokládejme, že jako příklad pojmenovaných parametrů je definovaná uložená procedura SQL Serveru takto:

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

V tomto postupu má první parametr @title_idvýchozí hodnotu 1. Aplikace může k vyvolání tohoto postupu použít následující kód, který určuje pouze jeden dynamický parametr. Tento parametr je pojmenovaný parametr s názvem "@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);