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.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Om de parameters van elke SQL-instructie te beschrijven, bouwt en voert de SQL Server Native Client ODBC-driver een Transact-SQL SELECT-instructie uit wanneer SQLDescribeParam wordt aangeroepen op een voorbereide ODBC-instructiehand. De metadata van de resultaatset bepaalt de kenmerken van de parameters in de voorbereide stelling. SQLDescribeParam kan elke foutcode teruggeven die SQLExecute of SQLExecDirect mogelijk teruggeeft.
Verbeteringen in de database-engine, beginnend met SQL Server 2012 (11.x), stellen SQLDescribeParam in staat om nauwkeurigere beschrijvingen van de verwachte resultaten te verkrijgen. Deze nauwkeurigere resultaten kunnen verschillen van de waarden die door SQLDescribeParam in eerdere versies van SQL Server worden teruggegeven. Voor meer informatie, zie Metadata Discovery.
Ook nieuw in SQL Server 2012 (11.x), geeft ParameterSizePtr nu een waarde terug die overeenkomt met de definitie voor de grootte, in tekens, van de kolom of expressie van de bijbehorende parametermarker zoals gedefinieerd in de ODBC-specificatie. In eerdere versies van SQL Server Native Client kon ParameterSizePtr de overeenkomstige waarde van SQL_DESC_OCTET_LENGTH voor het type zijn, of een irrelevante kolomgrootte die aan SQLBindParameter werd gegeven voor een type, waarvan de waarde genegeerd moest worden (bijvoorbeeld SQL_INTEGER).
De driver ondersteunt het aanroepen van SQLDescribeParam niet in de volgende situaties:
Na SQLExecDirect voor elke Transact-SQL UPDATE of DELETE statements die de FROM-clausule bevatten.
Voor elke ODBC- of Transact-SQL-instructie die een parameter bevat in een HAVING-clausule, of vergeleken met het resultaat van een SUM-functie.
Voor elke ODBC- of Transact-SQL-instructie afhankelijk van een subquery met parameters.
Voor ODBC SQL-statements die parametermarkers bevatten in zowel uitdrukkingen van een vergelijking, als een gekwantificeerd predicaat.
Voor elke zoekopdracht waarbij een van de parameters een parameter is voor een functie.
Wanneer er opmerkingen zijn (/* */) in het Transact-SQL-commando.
Bij het verwerken van een batch van Transact-SQL statements ondersteunt de driver ook geen aanroepen van SQLDescribeParam voor parametermarkers in statements na de eerste instructie in de batch.
Bij het beschrijven van de parameters van voorbereide opgeslagen procedures gebruikt SQLDescribeParam de systeemopgeslagen procedure sp_sproc_columns om parameterkenmerken op te halen. sp_sproc_columns kan gegevens rapporteren voor opgeslagen procedures binnen de huidige gebruikersdatabase. Het voorbereiden van een volledig gekwalificeerde opgeslagen procedurenaam maakt het mogelijk om SQLDescribeParam over databases uit te voeren. Bijvoorbeeld, de systeemopgeslagen procedure sp_who kan in elke database worden voorbereid en uitgevoerd als:
SQLPrepare(hstmt, "{call sp_who(?)}", SQL_NTS);
Het uitvoeren van SQLDescribeParam na succesvolle voorbereiding levert een lege rijset terug wanneer deze verbinding maakt met een database behalve de master. Dezelfde aanroep, opgesteld als volgt, zorgt ervoor dat SQLDescribeParam slaagt ongeacht de huidige gebruikersdatabase:
SQLPrepare(hstmt, "{call master..sp_who(?)}", SQL_NTS);
Voor datatypes met grote waarden is de waarde die in DataTypePtr wordt geretourneerd SQL_VARCHAR, SQL_VARBINARY of SQL_NVARCHAR. Om aan te geven dat de grootte van de parameter voor het datatype met grote waarde "onbeperkt" is, stelt de SQL Server Native Client ODBC-driver ParameterSizePtr op 0. Werkelijke groottewaarden worden teruggegeven voor standaard varchar-parameters .
Note
Als de parameter al is gebonden met een maximale grootte voor de SQL_VARCHAR, SQL_VARBINARY of SQL_WVARCHAR parameters, wordt de begrensde grootte van de parameter teruggegeven, niet "onbeperkt."
Om een invoerparameter van "onbeperkte" grootte te binden, moet data-at-execution worden gebruikt. Het is niet mogelijk om een outputparameter van "onbeperkte" grootte te binden (er is geen methode om data te streamen vanuit een outputparameter, zoals SQLGetData doet voor resultaatsets).
Voor uitvoerparameters moet een buffer worden gebonden en als de waarde te groot is, wordt de buffer gevuld en wordt een SQL_SUCCESS_WITH_INFO bericht teruggegeven samen met de "string data; rechter afkorting" waarschuwing. De gegevens die werden afgekapt, worden vervolgens weggegooid.
SQLDescribeParam en Table-Valued parameters
Een applicatie kan tabel-waarde parameterinformatie ophalen voor een voorbereide instructie met SQLDescribeParam. Voor meer informatie, zie Table-Valued Parameter Metadata for Prepared Statements.
Voor meer informatie over tabelwaardige parameters in het algemeen, zie Table-Valued Parameters (ODBC).
SQLDescribeParam-ondersteuning voor verbeterde datum- en tijdfuncties
De waarden die worden gegenereerd voor datum-/tijdtypes zijn als volgt:
| Attribute | DataTypePtr | ParameterSizePtr | DecimalDigitsPtr |
|---|---|---|---|
| datetime | SQL_TYPE_TIMESTAMP | 23 | 3 |
| smalldatetime | SQL_TYPE_TIMESTAMP | 16 | 0 |
| date | SQL_TYPE_DATE | 10 | 0 |
| time | SQL_SS_TIME2 | 8, 10..16 | 0..7 |
| datetime2 | SQL_TYPE_TIMESTAMP | 19, 21..27 | 0..7 |
| datetimeoffset | SQL_SS_TIMESTAMPOFFSET | 26, 28..34 | 0..7 |
Voor meer informatie, zie Datum en Tijd Verbeteringen (ODBC).
SQLDescribeParam-ondersteuning voor grote CLR UDT's
SQLDescribeParam ondersteunt grote CLR-gebruikersgedefinieerde types (UDT's). Voor meer informatie, zie Large CLR User-Defined Types (ODBC).