Condividi tramite


Funzione SQLStatistics

SQLStatistics recupera un elenco di statistiche relative a una singola tabella e agli indici associati alla tabella. Il driver restituisce le informazioni come set di risultati.

Conformità

Versione introdotta: Conformità agli standard ODBC 1.0: ISO 92

Sintassi

SQLRETURN SQLStatistics(
     SQLHSTMT        StatementHandle ,
     SQLCHAR *       CatalogName ,
     SQLSMALLINT     NameLength1 ,
     SQLCHAR *       SchemaName ,
     SQLSMALLINT     NameLength2 ,
     SQLCHAR *       TableName ,
     SQLSMALLINT     NameLength3 ,
     SQLUSMALLINT    Unique ,
     SQLUSMALLINT    Reserved);

Arguments

StatementHandle

[Input] Handle di istruzione.

CatalogName

[Input] Nome catalogo. Se un driver supporta cataloghi per alcune tabelle ma non per altri, ad esempio quando il driver recupera i dati da diversi DBMS, una stringa vuota ("") indica le tabelle che non dispongono di cataloghi. CatalogName non può contenere un criterio di ricerca di stringhe.

Se l'attributo dell'istruzione SQL_ATTR_METADATA_ID è impostato su SQL_TRUE, CatalogName viene considerato come identificatore e la relativa distinzione tra maiuscole e minuscole non è significativa. Se è SQL_FALSE, CatalogName è un argomento ordinario, viene trattato letteralmente e il relativo case è significativo. Per altre informazioni, vedere Argomenti in Funzioni del catalogo.

NameLength1

[Input] Lunghezza in caratteri di CatalogName.

SchemaName

[Input] Nome schema. Se un driver supporta schemi per alcune tabelle ma non per altri, ad esempio quando il driver recupera i dati da diversi DBMS, una stringa vuota ("") indica le tabelle che non dispongono di schemi. SchemaName non può contenere un criterio di ricerca di stringhe.

Se l'attributo dell'istruzione SQL_ATTR_METADATA_ID è impostato su SQL_TRUE, SchemaName viene considerato come identificatore e la relativa distinzione tra maiuscole e minuscole non è significativa. Se è SQL_FALSE, SchemaName è un argomento ordinario, viene trattato letteralmente e il relativo caso è significativo.

NameLength2

[Input] Lunghezza in caratteri di SchemaName.

TableName

[Input] Nome tabella. Questo argomento non può essere un puntatore Null. TableName non può contenere un criterio di ricerca di stringhe.

Se l'attributo dell'istruzione SQL_ATTR_METADATA_ID è impostato su SQL_TRUE, TableName viene considerato come identificatore e il relativo case non è significativo. Se è SQL_FALSE, TableName è un argomento ordinario, viene trattato letteralmente e il relativo caso è significativo.

NameLength3

[Input] Lunghezza in caratteri di TableName.

Unico

[Input] Tipo di indice: SQL_INDEX_UNIQUE o SQL_INDEX_ALL.

Riservato

[Input] Indica l'importanza delle CARDINALITY colonne e PAGES nel set di risultati. Le opzioni seguenti influiscono solo sulla restituzione delle CARDINALITY colonne e PAGES . Le informazioni sull'indice vengono restituite anche se CARDINALITY e PAGES non vengono restituite.

SQL_ENSURE richiede che il driver recuperi in modo incondizionato le statistiche. I driver conformi solo allo standard Open Group e non supportano le estensioni ODBC non saranno in grado di supportare SQL_ENSURE.

SQL_QUICK richiede che il driver recuperi CARDINALITY e PAGES solo se sono prontamente disponibili dal server. In questo caso, il driver non garantisce che i valori siano correnti. Le applicazioni scritte nello standard Open Group otterranno SQL_QUICK sempre il comportamento dai driver compatibili con ODBC 3.x.

Restituzioni

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERRORo SQL_INVALID_HANDLE.

Diagnostics

Quando SQLStatistics restituisce SQL_ERROR o SQL_SUCCESS_WITH_INFO, è possibile ottenere un valore associato SQLSTATE chiamando SQLGetDiagRec con handleType e SQL_HANDLE_STMThandle di StatementHandle. La tabella seguente elenca i SQLSTATE valori restituiti in genere da SQLStatistics e ne spiega ognuno nel contesto di questa funzione. La notazione (DM) precede le descrizioni di ognuna SQLSTATE restituita da Gestione driver. Il codice restituito associato a ogni SQLSTATE valore è SQL_ERROR, se non specificato diversamente.

SQLSTATE Errore Description
01000 Avviso generale Messaggio informativo specifico del driver. (La funzione restituisce SQL_SUCCESS_WITH_INFO.)
08S01 Errore del collegamento di comunicazione Collegamento di comunicazione tra il driver e l'origine dati a cui è stato connesso il driver non è riuscito prima del completamento dell'elaborazione della funzione.
24000 Stato del cursore non valido Un cursore è stato aperto in StatementHandle e SQLFetch o SQLFetchScroll era stato chiamato. Questo errore viene restituito da Gestione driver se o SQLFetchScroll non è stato restituito SQL_NO_DATA e viene restituito dal driver se SQLFetchSQLFetch o SQLFetchScroll è stato restituito SQL_NO_DATA.

Un cursore è stato aperto in StatementHandle, ma SQLFetch o SQLFetchScroll non è stato chiamato.
40001 Errore di serializzazione È stato eseguito il rollback della transazione a causa di un deadlock della risorsa con un'altra transazione.
40003 Completamento istruzione sconosciuto La connessione associata non è riuscita durante l'esecuzione di questa funzione e lo stato della transazione non può essere determinato.
HY000 Errore generale Si è verificato un errore per il quale non è stato definito alcun elemento specifico SQLSTATE dell'implementazione e per il quale non è stato definito alcun elemento specifico SQLSTATE dell'implementazione. Il messaggio di errore restituito da SQLGetDiagRec nel buffer *MessageText descrive l'errore e la causa.
HY001 Errore di allocazione della memoria Il driver non è riuscito ad allocare memoria necessaria per supportare l'esecuzione o il completamento della funzione.
HY008 Operazione annullata L'elaborazione asincrona è stata abilitata per StatementHandle. La funzione è stata chiamata e prima di completare l'esecuzione SQLCancel oppure SQLCancelHandle è stata chiamata su StatementHandle e quindi la funzione è stata chiamata nuovamente in StatementHandle.

La funzione è stata chiamata e prima del completamento dell'esecuzione SQLCancel oppure SQLCancelHandle è stata chiamata su StatementHandle da un thread diverso in un'applicazione multithread.
HY009 Uso non valido del puntatore Null L'argomento TableName è un puntatore Null.

L'attributo SQL_ATTR_METADATA_ID di istruzione è stato impostato su SQL_TRUE, l'argomento CatalogName era un puntatore Null e InfoTypeSQL_CATALOG_NAME restituisce che i nomi di catalogo sono supportati.

(DM) L'attributo SQL_ATTR_METADATA_ID di istruzione è stato impostato su SQL_TRUEe l'argomento SchemaName era un puntatore Null.
HY010 Errore della sequenza di funzioni (DM) È stata chiamata una funzione in esecuzione asincrona per l'handle di connessione associato a StatementHandle. Questa funzione asincrona era ancora in esecuzione quando SQLStatistics la funzione è stata chiamata.

(DM) SQLExecute, SQLExecDirecto SQLMoreResults è stato chiamato per StatementHandle e ha restituito SQL_PARAM_DATA_AVAILABLE. Questa funzione è stata chiamata prima del recupero dei dati per tutti i parametri trasmessi.

(DM) Una funzione in esecuzione asincrona (non questa) è stata chiamata per StatementHandle ed è ancora in esecuzione quando questa funzione è stata chiamata.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperationso SQLSetPos è stato chiamato per StatementHandle e ha restituito SQL_NEED_DATA. Questa funzione è stata chiamata prima dell'invio dei dati per tutti i parametri o le colonne data-at-execution.
HY013 Errore di gestione della memoria Impossibile elaborare la chiamata di funzione perché non è stato possibile accedere agli oggetti di memoria sottostanti, probabilmente a causa di condizioni di memoria insufficiente.
HY090 Lunghezza della stringa o del buffer non valida (DM) Il valore di uno degli argomenti di lunghezza del nome è minore di 0 ma non uguale a SQL_NTS.

Il valore di uno degli argomenti lunghezza nome ha superato il valore di lunghezza massima per il nome corrispondente.
HY100 Tipo di opzione di univocità non compreso nell'intervallo (DM) È stato specificato un valore univoco non valido.
HY101 Tipo di opzione accuratezza non compreso nell'intervallo (DM) È stato specificato un valore riservato non valido.
HY117 La connessione viene sospesa a causa dello stato sconosciuto della transazione. Sono consentite solo funzioni disconnesse e di sola lettura. (DM) Per altre informazioni sullo stato sospeso, vedere Funzione SQLEndTran.
HYC00 Funzionalità facoltativa non implementata È stato specificato un catalogo e il driver o l'origine dati non supporta i cataloghi.

È stato specificato uno schema e il driver o l'origine dati non supporta gli schemi.

La combinazione delle impostazioni correnti degli attributi dell'istruzione SQL_ATTR_CONCURRENCY e SQL_ATTR_CURSOR_TYPE non è supportata dal driver o dall'origine dati.

L'attributo SQL_ATTR_USE_BOOKMARKS di istruzione è stato impostato su SQL_UB_VARIABLEe l'attributo di SQL_ATTR_CURSOR_TYPE istruzione è stato impostato su un tipo di cursore per il quale il driver non supporta i segnalibri.
HYT00 Timeout scaduto Periodo di timeout della query scaduto prima che l'origine dati restituisca il set di risultati richiesto. Il periodo di timeout viene impostato tramite SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Il timeout della connessione è scaduto Periodo di timeout della connessione scaduto prima che l'origine dati rispondesse alla richiesta. Il periodo di timeout della connessione viene impostato tramite SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Il driver non supporta questa funzione (DM) Il driver associato a StatementHandle non supporta la funzione.
IM017 Il polling è disabilitato in modalità di notifica asincrona Ogni volta che viene usato il modello di notifica, il polling è disabilitato.
IM018 SQLCompleteAsync non è stato chiamato per completare l'operazione asincrona precedente su questo handle. Se la chiamata di funzione precedente sull'handle restituisce SQL_STILL_EXECUTING e se la modalità di notifica è abilitata, SQLCompleteAsync deve essere chiamata sull'handle per eseguire la post-elaborazione e completare l'operazione.

Comments

SQLStatisticsrestituisce informazioni su una singola tabella come set di risultati standard, ordinato per NON_UNIQUE, INDEX_QUALIFIERTYPE, INDEX_NAME, e ORDINAL_POSITION. Il set di risultati combina le informazioni sulle statistiche (nelle CARDINALITY colonne e PAGES del set di risultati) per la tabella con informazioni su ogni indice. Per informazioni su come usare queste informazioni, vedere Uses of Catalog Data.For information about how this information might be used, see Uses of Catalog Data.

Per determinare le lunghezze effettive delle TABLE_CATcolonne , TABLE_SCHEM, TABLE_NAMEe COLUMN_NAME , un'applicazione può chiamare SQLGetInfo con le SQL_MAX_CATALOG_NAME_LENopzioni , SQL_MAX_TABLE_NAME_LENSQL_MAX_SCHEMA_NAME_LEN, e SQL_MAX_COLUMN_NAME_LEN .

Annotazioni

Per altre informazioni sull'utilizzo generale, gli argomenti e i dati restituiti delle funzioni del catalogo ODBC, vedere Funzioni del catalogo.

Le colonne seguenti sono state rinominate per ODBC 3.x. Le modifiche apportate al nome della colonna non influiscono sulla compatibilità con le versioni precedenti perché le applicazioni si associano per numero di colonna.

Colonna ODBC 2.0 Colonna ODBC 3.x
TABLE_QUALIFIER TABLE_CAT
TABLE_OWNER TABLE_SCHEM
SEQ_IN_INDEX ORDINAL_POSITION
COLLATION ASC_OR_DESC

Nella tabella seguente sono elencate le colonne nel set di risultati. Le colonne aggiuntive oltre la colonna 13 (FILTER_CONDITION) possono essere definite dal driver. Un'applicazione deve ottenere l'accesso alle colonne specifiche del driver con il conteggio dalla fine del set di risultati invece di specificare una posizione ordinale esplicita. Per altre informazioni, vedere Dati restituiti dalle funzioni del catalogo.

Nome della colonna Numero di colonna Tipo di dati Comments
TABLE_CAT (ODBC 1.0) 1 varchar Nome del catalogo della tabella a cui si applica la statistica o l'indice; NULL se non applicabile all'origine dati. Se un driver supporta cataloghi per alcune tabelle, ma non per altri, ad esempio quando il driver recupera i dati da diversi DBMS, restituisce una stringa vuota ("") per le tabelle che non dispongono di cataloghi.
TABLE_SCHEM (ODBC 1.0) 2 varchar Nome dello schema della tabella a cui si applica la statistica o l'indice; NULL se non applicabile all'origine dati. Se un driver supporta schemi per alcune tabelle, ma non per altri, ad esempio quando il driver recupera i dati da diversi DBMS, restituisce una stringa vuota ("") per le tabelle che non dispongono di schemi.
TABLE_NAME (ODBC 1.0) 3 varchar not NULL Nome della tabella a cui si applica la statistica o l'indice.
NON_UNIQUE (ODBC 1.0) 4 smallint Indica se l'indice non consente valori duplicati:

SQL_TRUE se i valori di indice possono essere non univoci.

SQL_FALSE se i valori di indice devono essere univoci.

NULL viene restituito se TYPE è SQL_TABLE_STAT.
INDEX_QUALIFIER (ODBC 1.0) 5 varchar L'identificatore utilizzato per qualificare il nome dell'indice eseguendo un DROP INDEXoggetto ; NULL viene restituito se un qualificatore di indice non è supportato dall'origine dati o se TYPE è SQL_TABLE_STAT. Se in questa colonna viene restituito un valore non Null, deve essere utilizzato per qualificare il nome dell'indice in un'istruzione DROP INDEX . In caso contrario, deve TABLE_SCHEM essere utilizzato per qualificare il nome dell'indice.
INDEX_NAME (ODBC 1.0) 6 varchar Nome indice; NULL viene restituito se TYPE è SQL_TABLE_STAT.
TYPE (ODBC 1.0) 7 smallint non NULL Tipo di informazioni restituite:

SQL_TABLE_STAT indica una statistica per la tabella (nella CARDINALITY colonna o PAGES ).

SQL_INDEX_BTREE indica un indice albero B.

SQL_INDEX_CLUSTERED indica un indice cluster.

SQL_INDEX_CONTENT indica un indice di contenuto.

SQL_INDEX_HASHED indica un indice con hash.

SQL_INDEX_OTHER indica un altro tipo di indice.
ORDINAL_POSITION (ODBC 1.0) 8 smallint Numero di sequenza di colonna nell'indice (a partire da 1); NULL viene restituito se TYPE è SQL_TABLE_STAT.
COLUMN_NAME (ODBC 1.0) 9 varchar Nome colonna. Se la colonna è basata su un'espressione, ad esempio SALARY + BENEFITS, viene restituita l'espressione. Se l'espressione non può essere determinata, viene restituita una stringa vuota. NULL viene restituito se TYPE è SQL_TABLE_STAT.
ASC_OR_DESC (ODBC 1.0) 10 char(1) Sequenza di ordinamento per la colonna: "A" per l'ordine crescente; "D" per decrescente; NULL viene restituito se la sequenza di ordinamento delle colonne non è supportata dall'origine dati o se TYPE è SQL_TABLE_STAT.
CARDINALITY (ODBC 1.0) 11 integer Cardinalità della tabella o dell'indice; numero di righe nella tabella se TYPE è SQL_TABLE_STAT; numero di valori univoci nell'indice se TYPE non SQL_TABLE_STATè ; NULL viene restituito se il valore non è disponibile dall'origine dati.
PAGES (ODBC 1.0) 12 integer Numero di pagine utilizzate per archiviare l'indice o la tabella; numero di pagine per la tabella se TYPE è SQL_TABLE_STAT; numero di pagine per l'indice se TYPE non SQL_TABLE_STATè ; NULL viene restituito se il valore non è disponibile dall'origine dati o se non applicabile all'origine dati.
FILTER_CONDITION (ODBC 2.0) 13 varchar Se l'indice è un indice filtrato, si tratta della condizione di filtro, ad esempio SALARY > 30000; se la condizione di filtro non può essere determinata, si tratta di una stringa vuota.

NULL se l'indice non è un indice filtrato, non può essere determinato se l'indice è un indice filtrato o TYPE è SQL_TABLE_STAT.

Se la riga nel set di risultati corrisponde a una tabella, il driver imposta TYPE su SQL_TABLE_STAT e imposta NON_UNIQUE, INDEX_QUALIFIER, INDEX_NAMEORDINAL_POSITION, COLUMN_NAMEe ASC_OR_DESC su NULL. Se CARDINALITY o PAGES non sono disponibili dall'origine dati, il driver li imposta su NULL.

Esempio di codice

Per un esempio di codice di una funzione simile, vedere Funzione SQLColumns.

Per informazioni su Article
Associazione di un buffer a una colonna in un set di risultati Funzione SQLBindCol
Annullamento dell'elaborazione delle istruzioni Funzione SQLCancel
Recupero di una singola riga o di un blocco di dati in una direzione forward-only. Funzione SQLFetch
Recupero di un blocco di dati o scorrimento di un set di risultati Funzione SQLFetchScroll
Restituzione delle colonne di chiavi esterne Funzione SQLForeignKeys
Restituzione delle colonne di una chiave primaria Funzione SQLPrimaryKeys