Condividi tramite


SQLDescribeParam

Per descrivere i parametri di qualsiasi istruzione SQL, il driver ODBC di SQL Server Native Client compila ed esegue un'istruzione Transact-SQL SELECT quando viene chiamato SQLDescribeParam 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 che può essere restituito da SQLExecute o SQLExecDirect.

I miglioramenti apportati al motore di database a partire da SQL Server 2012 consentono a SQLDescribeParam di ottenere descrizioni più accurate dei risultati previsti. È possibile che questi risultati più accurati differiscano dai valori restituiti da SQLDescribeParam nelle versioni precedenti di SQL Server. Per ulteriori informazioni, vedere Individuazione dei metadati.

Un'altra novità di SQL Server 2012 è ParameterSizePtr, che ora restituisce un valore conforme alla definizione relativa alla dimensione, 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 può essere il valore corrispondente di SQL_DESC_OCTET_LENGTH per il tipo oppure un valore di dimensione di colonna irrilevante fornito a SQLBindParameter per un tipo e che deve essere ignorato (ad esempio, SQL_INTEGER).

Il driver non supporta la chiamata a SQLDescribeParam nelle situazioni seguenti:

  • Dopo l'esecuzione di 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 confrontata con il risultato di una funzione SUM.

  • Per qualsiasi istruzione ODBC o Transact-SQL a seconda di una subquery che contiene 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.

In caso di elaborazione di un batch di istruzioni Transact-SQL, il driver non supporta inoltre la chiamata a SQLDescribeParam per i marcatori di parametro nelle istruzioni dopo la prima istruzione del batch.

Per la descrizione dei parametri delle stored procedure preparate, SQLDescribeParam utilizza la stored procedure di sistema sp_sproc_columns per richiamare le caratteristiche del parametro. sp_sproc_columns possono riportare dati per le stored procedure all'interno del database utente corrente. La preparazione di un nome di stored procedure completo consente l'esecuzione di SQLDescribeParam nel database. La stored procedure di sistema sp_who può ad esempio essere preparata ed eseguita in qualsiasi database come indicato di seguito:

SQLPrepare(hstmt, "{call sp_who(?)}", SQL_NTS);

Se si esegue SQLDescribeParam in seguito a una preparazione riuscita, viene restituito un set di righe vuoto quando si è connessi a qualsiasi database, purché di tipo master. La stessa chiamata, preparata come segue, determina la riuscita di SQLDescribeParam indipendentemente dal database utente corrente:

SQLPrepare(hstmt, "{call master..sp_who(?)}", SQL_NTS);

Nel caso dei tipi di dati con valori 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 per valori di grandi dimensioni sono illimitate, il driver ODBC di 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 un metodo per l'invio in flusso dei dati da un parametro di output (funzione svolta da 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 consente di recuperare le informazioni sui parametri con valori di tabella per un'istruzione preparata con SQLDescribeParam. Per ulteriori informazioni, vedere Metadati del parametro con valori di tabella per le istruzioni preparate.

Per ulteriori informazioni generiche sui parametri con valori di tabella, 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

ora

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 ulteriori informazioni, vedere Miglioramenti relativi a 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 ulteriori informazioni, vedere Tipi CLR definiti dall'utente di grandi dimensioni (ODBC).

Vedere anche

Concetti

Dettagli di implementazione di API ODBC

Altre risorse

Funzione SQLDescribeParam