Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Met bepaalde DBMS's kan een toepassing de parameters opgeven voor een opgeslagen procedure op naam in plaats van op positie in de procedureaanroep. Dergelijke parameters worden benoemde parameters genoemd. ODBC ondersteunt het gebruik van benoemde parameters. In ODBC worden benoemde parameters alleen gebruikt in aanroepen naar opgeslagen procedures en kunnen ze niet worden gebruikt in andere SQL-instructies.
Het stuurprogramma controleert de waarde van het SQL_DESC_UNNAMED veld van de IPD om te bepalen of benoemde parameters worden gebruikt. Als SQL_DESC_UNNAMED niet is ingesteld op SQL_UNNAMED, gebruikt het stuurprogramma de naam in het SQL_DESC_NAME veld van de IPD om de parameter te identificeren. Als u de parameter wilt binden, kan een toepassing SQLBindParameter aanroepen om de parametergegevens op te geven en vervolgens SQLSetDescField aanroepen om het SQL_DESC_NAME veld van de IPD in te stellen. Wanneer benoemde parameters worden gebruikt, is de volgorde van de parameter in de procedure-aanroep niet belangrijk en wordt het recordnummer van de parameter genegeerd.
Het verschil tussen niet-benoemde parameters en benoemde parameters bevindt zich in de relatie tussen het recordnummer van de descriptor en het parameternummer in de procedure. Wanneer niet-benoemde parameters worden gebruikt, is de eerste parametermarkering gerelateerd aan de eerste record in de parameterdescriptor, die op zijn beurt gerelateerd is aan de eerste parameter (in aanmaakvolgorde) in de procedureaanroep. Wanneer benoemde parameters worden gebruikt, is de eerste parametermarkering nog steeds gerelateerd aan de eerste record van de parameterdescriptor, maar de relatie tussen het recordnummer van de descriptor en het parameternummer in de procedure bestaat niet meer. Benoemde parameters gebruiken de toewijzing van het descriptorrecordnummer aan de positie van de procedureparameter niet; in plaats daarvan wordt de naam van het descriptorrecord toegewezen aan de naam van de procedureparameter.
Opmerking
Als automatische populatie van de IPD is ingeschakeld, vult het stuurprogramma descriptor zodanig dat de volgorde van de descriptorrecords overeenkomt met de volgorde van de parameters in de proceduredefinitie, zelfs als benoemde parameters worden gebruikt.
Als een benoemde parameter wordt gebruikt, moeten alle parameters benoemd zijn. Als er een parameter geen benoemde parameter is, kan geen van de parameters benoemde parameters zijn. Als er een combinatie van benoemde parameters en niet-benoemde parameters is, is het gedrag afhankelijk van het stuurprogramma.
Stel dat een opgeslagen SQL Server-procedure als voorbeeld van benoemde parameters als volgt is gedefinieerd:
CREATE PROCEDURE test @title_id int = 1, @quote char(30) AS <blah>
In deze procedure heeft de eerste parameter, @title_idde standaardwaarde 1. Een toepassing kan de volgende code gebruiken om deze procedure aan te roepen, zodat er slechts één dynamische parameter wordt opgegeven. Deze parameter is een benoemde parameter met de naam '@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);