Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
För att beskriva parametrarna för varje SQL-sats bygger och utför den SQL Server Native Client ODBC-drivrutinen ett Transact-SQL SELECT-uttalande när SQLDescribeParam anropas på ett förberett ODBC-uttalandehandtag. Metadata för resultatmängden bestämmer egenskaperna hos parametrarna i det förberedda uttalandet. SQLDescribeParam kan returnera vilken felkod som helst som SQLExecute eller SQLExecDirect kan ge.
Förbättringar i databasmotorn, med start från SQL Server 2012 (11.x), gör det möjligt för SQLDescribeParam att få mer exakta beskrivningar av de förväntade resultaten. Dessa mer exakta resultat kan skilja sig från de värden som returneras av SQLDescribeParam i tidigare versioner av SQL Server. För mer information, se Metadata Discovery.
Även nytt i SQL Server 2012 (11.x), returnerar ParameterSizePtr nu ett värde som stämmer överens med definitionen för storleken, i tecken, på kolumnen eller uttrycket för motsvarande parametermarkör enligt ODBC-specifikationen. I tidigare versioner av SQL Server Native Client kunde ParameterSizePtr vara motsvarande värde SQL_DESC_OCTET_LENGTH för typen, eller ett irrelevant kolumnstorleksvärde som angavs till SQLBindParameter för en typ, vars värde bör ignoreras (till exempel SQL_INTEGER).
Drivrutinen stöder inte anrop av SQLDescribeParam i följande situationer:
Efter SQLExecDirect för alla Transact-SQL UPDATE eller DELETE satser som innehåller FROM-satsen.
För varje ODBC- eller Transact-SQL-sats som innehåller en parameter i en HOVERING-klausul, eller jämfört med resultatet av en SUM-funktion.
För varje ODBC- eller Transact-SQL-sats beroende på en delfråga som innehåller parametrar.
För ODBC SQL-satser som innehåller parametermarkörer i båda uttrycken av en jämförelse, som eller kvantifiserat predikat.
För alla frågor där en av parametrarna är en parameter till en funktion.
När det finns kommentarer (/* */) i kommandot Transact-SQL.
När man bearbetar en batch av Transact-SQL-satser stöder drivrutinen inte heller anrop SQLDescribeParam för parametermarkörer i satser efter den första satsen i batchen.
När parametrarna för förberedda lagrade procedurer beskrivs använder SQLDescribeParam systemproceduren sp_sproc_columns för att hämta parameteregenskaper. sp_sproc_columns kan rapportera data för lagrade procedurer i den aktuella användardatabasen. Att förbereda ett fullt kvalificerat lagrat procedurnamn gör att SQLDescribeParam kan köras över databaser. Till exempel kan systemlagrad procedur sp_who förberedas och köras i vilken databas som helst som:
SQLPrepare(hstmt, "{call sp_who(?)}", SQL_NTS);
Att köra SQLDescribeParam efter lyckad förberedelse returnerar en tom raduppsättning när den är ansluten till någon databas utom master. Samma anrop, förberetts enligt följande, gör att SQLDescribeParam lyckas oavsett vilken användardatabas som är aktuell:
SQLPrepare(hstmt, "{call master..sp_who(?)}", SQL_NTS);
För stora värdedatatyper är värdet som returneras i DataTypePtr SQL_VARCHAR, SQL_VARBINARY eller SQL_NVARCHAR. För att indikera att storleken på den stora värdedatatypparametern är "obegränsad" sätter SQL Server Native Client ODBC-drivrutinen ParameterSizePtr till 0. Faktiska storleksvärden returneras för standard varchar-parametrar .
Anmärkning
Om parametern redan har bundits med en maximal storlek för SQL_VARCHAR, SQL_VARBINARY eller SQL_WVARCHAR parametrar, returneras parameterns begränsade storlek, inte "obegränsad."
För att binda en "obegränsad" indataparameter måste data-at-exekvering användas. Det är inte möjligt att binda en "obegränsad" storlek på utdataparameter (det finns ingen metod för att strömma data från en utdataparameter, som SQLGetData gör för resultatmängder).
För utdata parametrar måste en buffert bindas och om värdet är för stort fylls bufferten och ett SQL_SUCCESS_WITH_INFO meddelande skickas tillbaka tillsammans med "strängdatan; Höger trunkering"-varning. Den data som avkortades kastas sedan.
SQLDescribeParam och Table-Valued parametrar
En applikation kan hämta tabellvärd parameterinformation för en förberedd sats med SQLDescribeParam. För mer information, se Table-Valued Parameter Metadata för förberedda uttalanden.
För mer information om tabellvärda parametrar i allmänhet, se Table-Valued Parameters (ODBC).
SQLDescribeParam-stöd för förbättrade datum- och tidsfunktioner
Värdena som returneras för datum-/tid-typer är följande:
| 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 |
För mer information, se Datum och Tid Förbättringar (ODBC).
SQLDescribeParam-stöd för stora CLR UDT:er
SQLDescribeParam stöder stora CLR-användardefinierade typer (UDT). För mer information, se Large CLR User-Defined Types (ODBC).
Se även
SQLDescribeParam-funktionen
Implementeringsinformation för ODBC API