SQLDescribeParam
Per descrivere i parametri di qualsiasi istruzione SQL, il driver ODBC SQL Server Native Client compila ed esegue un'istruzione Transact-SQL SELECT quando SQLDescribeParam viene chiamato su un handle di istruzione ODBC preparato. I metadati del set di risultati determinano le caratteristiche dei parametri dell'istruzione preparata. SQLDescribeParam può restituire qualsiasi codice di errore restituito da SQLExecute o SQLExecDirect.
Miglioramenti nel motore di database a partire da SQL Server 2012 consentono a SQLDescribeParam di ottenere descrizioni più accurate dei risultati previsti. Questi risultati più accurati possono essere diversi dai valori restituiti da SQLDescribeParam nelle versioni precedenti di SQL Server. Per altre informazioni, vedere Metadata Discovery.
Novità anche in SQL Server 2012, ParameterSizePtr restituisce ora un valore allineato alla definizione per le dimensioni, in caratteri, della colonna o dell'espressione del marcatore di parametro corrispondente come definito nella specifica ODBC. Nelle versioni precedenti di SQL Server Native Client, ParameterSizePtr potrebbe essere il valore corrispondente di SQL_DESC_OCTET_LENGTH
per il tipo o un valore di dimensione della colonna irrilevante fornito a SQLBindParameter per un tipo, il valore di cui deve essere ignorato (SQL_INTEGER
ad esempio).
Il driver non supporta la chiamata a SQLDescribeParam nelle situazioni seguenti:
Dopo SQLExecDirect per qualsiasi istruzione Transact-SQL UPDATE o DELETE contenente la clausola FROM.
Per qualsiasi istruzione ODBC o Transact-SQL contenente un parametro in una clausola HAVING o confrontato con il risultato di una funzione SUM.
Per qualsiasi istruzione ODBC o Transact-SQL a seconda di una sottoquery contenente parametri.
Per le istruzioni ODBC SQL che contengono marcatori di parametro in entrambe le espressioni di un predicato di confronto, LIKE o quantificato.
Per qualsiasi query in cui uno dei parametri è il parametro di una funzione.
Quando sono presenti commenti (/* */) nel comando Transact-SQL.
Quando si elabora un batch di istruzioni Transact-SQL, il driver non supporta anche la chiamata di SQLDescribeParam per i marcatori di parametri nelle istruzioni dopo la prima istruzione nel batch.
Quando si descrivono i parametri delle stored procedure preparate, SQLDescribeParam usa la stored procedure di sistema sp_sproc_columns per recuperare le caratteristiche dei parametri. sp_sproc_columns può segnalare i dati per le stored procedure all'interno del database utente corrente. La preparazione di un nome di stored procedure completo consente a SQLDescribeParam di eseguire tra database. Ad esempio, la stored procedure di sistema sp_who può essere preparata ed eseguita in qualsiasi database come:
SQLPrepare(hstmt, "{call sp_who(?)}", SQL_NTS);
L'esecuzione di SQLDescribeParam dopo l'esito positivo della preparazione restituisce un set di righe vuoto quando è connesso a qualsiasi database ma master
. La stessa chiamata, preparata come segue, causa l'esito positivo di SQLDescribeParam indipendentemente dal database utente corrente:
SQLPrepare(hstmt, "{call master..sp_who(?)}", SQL_NTS);
Per i tipi di dati di valore di grandi dimensioni, il valore restituito in DataTypePtr è SQL_VARCHAR, SQL_VARBINARY o SQL_NVARCHAR. Per indicare che le dimensioni del parametro del tipo di dati di valore di grandi dimensioni sono "illimitate", il driver ODBC SQL Server Native Client imposta ParameterSizePtr su 0. Vengono restituiti i valori delle dimensioni effettive per i parametri varchar
standard.
Nota
Se il parametro è già stato associato alle dimensioni massime del parametro SQL_VARCHAR, SQL_VARBINARY o SQL_WVARCHAR, vengono restituite le dimensioni associate limitate del parametro.
Per associare un parametro di input di dimensioni illimitate, è necessario utilizzare data-at-execution. Non è possibile associare un parametro di output di dimensioni "illimitate" (non esiste alcun metodo per lo streaming di dati da un parametro di output, ad esempio SQLGetData per i set di risultati).
Per i parametri di output è necessario associare un buffer. Se il valore è troppo grande, il buffer viene riempito e vengono restituiti un messaggio SQL_SUCCESS_WITH_INFO e un avviso "Troncamento a destra della stringa di dati". I dati troncati verranno quindi eliminati.
SQLDescribeParam e parametri con valori di tabella
Un'applicazione può recuperare informazioni sui parametri con valori di tabella per un'istruzione preparata con SQLDescribeParam. Per altre informazioni, vedere Metadati dei parametri con valori di tabella per istruzioni preparate.
Per altre informazioni sui parametri con valori di tabella in generale, vedere Parametri con valori di tabella (ODBC).
Supporto di SQLDescribeParam per le caratteristiche avanzate di data e ora
I valori restituiti per i tipi di data/ora sono i seguenti:
DataTypePtr | ParameterSizePtr | DecimalDigitsPtr | |
---|---|---|---|
Datetime | SQL_TYPE_TIMESTAMP | 23 | 3 |
smalldatetime | SQL_TYPE_TIMESTAMP | 16 | 0 |
data | 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 |
Per altre informazioni, vedere Miglioramenti di data e ora (ODBC).
Supporto di SQLDescribeParam per i tipi CLR definiti dall'utente di grandi dimensioni
SQLDescribeParam
supporta i tipi CLR definiti dall'utente di grandi dimensioni. Per altre informazioni, vedere Tipi di User-Defined CLR di grandi dimensioni (ODBC).
Vedere anche
Funzione SQLDescribeParam
Dettagli di implementazione dell'API ODBC