Condividi tramite


SQLDescribeParam

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)

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 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.

I miglioramenti apportati al motore di database a partire da SQL Server 2012 (11.x) consentono a SQLDescribeParam di ottenere descrizioni più accurate dei risultati previsti. Questi risultati più accurati possono differire dai valori restituiti da SQLDescribeParam nelle versioni precedenti di SQL Server. Per altre informazioni, vedere Metadata Discovery.

Novità anche in SQL Server 2012 (11.x), 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 cui valore deve essere ignorato (ad esempio SQL_INTEGER).

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 rispetto al 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.

Durante l'elaborazione di un batch di istruzioni Transact-SQL, il driver non supporta anche la chiamata di SQLDescribeParam per i marcatori di parametro 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 possibile segnalare i 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 tra database. Ad esempio, la stored procedure di sistema sp_who può essere preparata ed eseguita in qualsiasi database come segue:

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

L'esecuzione di SQLDescribeParam dopo la corretta preparazione restituisce un set di righe vuoto quando si è connessi a qualsiasi database ma master. La stessa chiamata, preparata come segue, fa sì che SQLDescribeParam abbia esito positivo indipendentemente dal database utente corrente:

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

Per i tipi di dati per 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. I valori delle dimensioni effettive vengono restituiti 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 dei 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:

Attributo 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 altre informazioni, vedere Miglioramenti di data e ora (ODBC).

Supporto di SQLDescribeParam per i tipi CLR definiti dall'utente di grandi dimensioni

SQLDescribeParam supporta tipi CLR definiti dall'utente di grandi dimensioni. Per altre informazioni, vedere Tipi CLR definiti dall'utente (ODBC) di grandi dimensioni.

Vedi anche

Funzione SQLDescribeParam
Dettagli di implementazione dell'API ODBC