Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
SQLStatistics Ruft eine Liste von Statistiken zu einer einzelnen Tabelle und den Indizes ab, die der Tabelle zugeordnet sind. Der Treiber gibt die Informationen als Resultset zurück.
Konformität
Version eingeführt: ODBC 1.0 Standards Compliance: ISO 92
Syntax
SQLRETURN SQLStatistics(
SQLHSTMT StatementHandle ,
SQLCHAR * CatalogName ,
SQLSMALLINT NameLength1 ,
SQLCHAR * SchemaName ,
SQLSMALLINT NameLength2 ,
SQLCHAR * TableName ,
SQLSMALLINT NameLength3 ,
SQLUSMALLINT Unique ,
SQLUSMALLINT Reserved);
Arguments
StatementHandle
[Eingabe] Anweisungshandle.
Catalogname
[Eingabe] Katalogname. Wenn ein Treiber Kataloge für einige Tabellen, aber nicht für andere unterstützt, z. B. wenn der Treiber Daten aus verschiedenen DBMSs abruft, gibt eine leere Zeichenfolge ("") diese Tabellen an, die nicht über Kataloge verfügen.
CatalogName kann kein Zeichenfolgensuchmuster enthalten.
Wenn das SQL_ATTR_METADATA_ID Anweisungsattribut auf SQL_TRUE"CatalogName" festgelegt ist, wird "CatalogName " als Bezeichner behandelt, und der Fall ist nicht signifikant. Wenn dies der Fall ist SQL_FALSE, ist CatalogName ein gewöhnliches Argument; es wird buchstäblich behandelt, und sein Fall ist signifikant. Weitere Informationen finden Sie unter "Argumente in Katalogfunktionen".
NameLength1
[Eingabe] Länge in Zeichen von CatalogName.
SchemaName
[Eingabe] Schemaname. Wenn ein Treiber Schemas für einige Tabellen, aber nicht für andere unterstützt, z. B. wenn der Treiber Daten aus verschiedenen DBMSs abruft, gibt eine leere Zeichenfolge ("") diese Tabellen an, die keine Schemas besitzen.
SchemaName kann kein Zeichenfolgensuchmuster enthalten.
Wenn das SQL_ATTR_METADATA_ID Anweisungsattribut auf SQL_TRUE" SchemaName " festgelegt ist, wird SchemaName als Bezeichner behandelt, und der Fall ist nicht signifikant. Wenn dies der Fall ist SQL_FALSE, ist SchemaName ein gewöhnliches Argument. Es wird buchstäblich behandelt, und der Fall ist signifikant.
NameLength2
[Eingabe] Länge in Zeichen von SchemaName.
Tabellenname
[Eingabe] Tabellenname. Dieses Argument kann kein Nullzeiger sein. TableName kann kein Zeichenfolgensuchmuster enthalten.
Wenn das SQL_ATTR_METADATA_ID Anweisungsattribut auf SQL_TRUE"TableName" festgelegt ist, wird "TableName " als Bezeichner behandelt, und der Fall ist nicht signifikant. Wenn dies der Fall ist SQL_FALSE, ist TableName ein gewöhnliches Argument. Es wird buchstäblich behandelt, und der Fall ist signifikant.
NameLength3
[Eingabe] Länge in Zeichen von TableName.
Einzigartig
[Eingabe] Indextyp: SQL_INDEX_UNIQUE oder SQL_INDEX_ALL.
Reserved
[Eingabe] Gibt die Wichtigkeit der CARDINALITY Und PAGES Spalten im Resultset an. Die folgenden Optionen wirken sich nur auf die Rückgabe der CARDINALITY Spalten aus PAGES . Indexinformationen werden auch dann zurückgegeben, wenn CARDINALITY sie PAGES nicht zurückgegeben werden.
SQL_ENSURE fordert an, dass der Treiber die Statistiken bedingungslos abruft. (Treiber, die nur dem Open Group-Standard entsprechen und ODBC-Erweiterungen nicht unterstützen, können nicht unterstützt SQL_ENSUREwerden.)
SQL_QUICK fordert an, dass der Treiber die CARDINALITY und PAGES nur dann abruft, wenn er leicht vom Server verfügbar ist. In diesem Fall stellt der Treiber nicht sicher, dass die Werte aktuell sind. (Anwendungen, die in den Open Group-Standard geschrieben werden, erhalten SQL_QUICK immer ein Verhalten von ODBC 3.x-kompatiblen Treibern.)
Rückkehr
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, , SQL_ERRORoder SQL_INVALID_HANDLE.
Diagnostics
Bei SQLStatistics Rückgaben SQL_ERROR oder SQL_SUCCESS_WITH_INFO, kann ein zugeordneter SQLSTATE Wert durch Aufrufen SQLGetDiagRec eines HandleType von SQL_HANDLE_STMT und eines Handle of StatementHandle abgerufen werden. In der folgenden Tabelle sind die Werte aufgeführt, die in der SQLSTATE Regel von SQLStatistics dieser Funktion zurückgegeben werden, und erläutert sie im Kontext dieser Funktion. Die Notation (DM) steht vor den Beschreibungen der einzelnen SQLSTATE vom Treiber-Manager zurückgegebenen Werte. Der rückgabecode, der den einzelnen SQLSTATE Werten zugeordnet ist, ist SQL_ERROR, sofern nicht anders angegeben.
| SQLSTATE | Fehler | Description |
|---|---|---|
01000 |
Allgemeine Warnung | Treiberspezifische Informationsmeldung. (Funktion gibt SQL_SUCCESS_WITH_INFOzurück.) |
08S01 |
Kommunikationslinkfehler | Die Kommunikationsverbindung zwischen dem Treiber und der Datenquelle, mit der der Treiber verbunden wurde, ist fehlgeschlagen, bevor die Verarbeitung der Funktion abgeschlossen wurde. |
24000 |
Ungültiger Cursorzustand | Ein Cursor war im StatementHandle geöffnet und SQLFetch oder SQLFetchScroll wurde aufgerufen. Dieser Fehler wird vom Treiber-Manager zurückgegeben, wenn SQLFetch er SQLFetchScroll nicht zurückgegeben SQL_NO_DATA wurde und vom Treiber zurückgegeben wird, wenn SQLFetch oder SQLFetchScroll zurückgegeben wurde SQL_NO_DATA.Ein Cursor war im StatementHandle geöffnet, SQLFetchSQLFetchScroll aber er wurde nicht aufgerufen. |
40001 |
Serialisierungsfehler | Die Transaktion wurde aufgrund eines Ressourcen-Deadlocks mit einer anderen Transaktion zurückgesetzt. |
40003 |
Abschluss der Anweisung unbekannt | Fehler bei der zugehörigen Verbindung während der Ausführung dieser Funktion, und der Status der Transaktion kann nicht bestimmt werden. |
HY000 |
Allgemeiner Fehler | Es ist ein Fehler aufgetreten, für den kein spezifischer SQLSTATE Fehler aufgetreten ist und für den keine implementierungsspezifisch SQLSTATE definiert wurde. Die im *MessageText-Puffer zurückgegebene SQLGetDiagRec Fehlermeldung beschreibt den Fehler und die Ursache. |
HY001 |
Speicherzuweisungsfehler | Der Treiber konnte arbeitsspeicher nicht zuordnen, der zur Unterstützung der Ausführung oder Fertigstellung der Funktion erforderlich ist. |
HY008 |
Vorgang abgebrochen | Die asynchrone Verarbeitung wurde für " StatementHandle" aktiviert. Die Funktion wurde aufgerufen, und bevor sie die Ausführung abgeschlossen hat oder SQLCancelSQLCancelHandle für das StatementHandle aufgerufen wurde, und dann wurde die Funktion erneut für das StatementHandle aufgerufen.Die Funktion wurde aufgerufen, und bevor sie die Ausführung abgeschlossen hat oder SQLCancelSQLCancelHandle von einem anderen Thread in einer Multithread-Anwendung aufgerufen wurde. |
HY009 |
Ungültige Verwendung des Nullzeigers | Das Argument "TableName" war ein Nullzeiger. Das SQL_ATTR_METADATA_ID Anweisungsattribut wurde auf festgelegt SQL_TRUE, das CatalogName-Argument war ein NULL-Zeiger, und der SQL_CATALOG_NAMEInfoType gibt zurück, dass Katalognamen unterstützt werden.(DM) Das Anweisungsattribut SQL_ATTR_METADATA_ID wurde auf SQL_TRUEfestgelegt, und das SchemaName-Argument war ein NULL-Zeiger. |
HY010 |
Funktionssequenzfehler | (DM) Eine asynchron ausgeführte Funktion wurde für den Verbindungshandle aufgerufen, der dem StatementHandle zugeordnet ist. Diese asynchrone Funktion wurde noch ausgeführt, als die SQLStatistics Funktion aufgerufen wurde.(DM) SQLExecute, SQLExecDirectoder SQLMoreResults wurde für die StatementHandle aufgerufen und zurückgegeben SQL_PARAM_DATA_AVAILABLE. Diese Funktion wurde aufgerufen, bevor Daten für alle gestreamten Parameter abgerufen wurden.(DM) Eine asynchron ausgeführte Funktion (nicht diese) wurde für das StatementHandle aufgerufen und wurde noch ausgeführt, als diese Funktion aufgerufen wurde. (DM) SQLExecute, SQLExecDirect, , SQLBulkOperationsoder SQLSetPos wurde für die StatementHandle aufgerufen und zurückgegeben SQL_NEED_DATA. Diese Funktion wurde aufgerufen, bevor Daten für alle Daten bei ausführungsparametern oder -spalten gesendet wurden. |
HY013 |
Speicherverwaltungsfehler | Der Funktionsaufruf konnte nicht verarbeitet werden, da auf die zugrunde liegenden Speicherobjekte nicht zugegriffen werden konnte, möglicherweise aufgrund geringer Arbeitsspeicherbedingungen. |
HY090 |
Ungültige Zeichenfolgen- oder Pufferlänge | (DM) Der Wert eines der Namenlängenargumente war kleiner als 0, aber nicht gleich SQL_NTS.Der Wert eines der Namenlängenargumente hat den maximal zulässigen Längenwert für den entsprechenden Namen überschritten. |
HY100 |
Eindeutigkeitsoptionstyp außerhalb des Bereichs | (DM) Es wurde ein ungültiger eindeutiger Wert angegeben. |
HY101 |
Genauigkeitsoptionstyp außerhalb des zulässigen Bereichs | (DM) Es wurde ein ungültiger reservierter Wert angegeben. |
HY117 |
Die Verbindung wird aufgrund des unbekannten Transaktionsstatus angehalten. Es sind nur Trenn- und schreibgeschützte Funktionen zulässig. | (DM) Weitere Informationen zum angehaltenen Zustand finden Sie unter SQLEndTran Function. |
HYC00 |
Optionales Feature wurde nicht implementiert | Ein Katalog wurde angegeben, und der Treiber oder die Datenquelle unterstützt keine Kataloge. Es wurde ein Schema angegeben, und der Treiber oder die Datenquelle unterstützt keine Schemas. Die Kombination der aktuellen Einstellungen der SQL_ATTR_CONCURRENCY Attribute und SQL_ATTR_CURSOR_TYPE Der Anweisung wurde vom Treiber oder der Datenquelle nicht unterstützt.Das SQL_ATTR_USE_BOOKMARKS Anweisungsattribut wurde auf SQL_UB_VARIABLE", und das SQL_ATTR_CURSOR_TYPE Anweisungsattribut wurde auf einen Cursortyp festgelegt, für den der Treiber keine Lesezeichen unterstützt. |
HYT00 |
Timeout abgelaufen | Der Abfragetimeoutzeitraum ist abgelaufen, bevor die Datenquelle das angeforderte Resultset zurückgegeben hat. Der Timeoutzeitraum wird durch SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT. |
HYT01 |
Verbindungstimeout abgelaufen | Der Zeitraum für das Verbindungstimeout ist abgelaufen, bevor die Datenquelle auf die Anforderung geantwortet hat. Der Timeoutzeitraum für die Verbindung wird durch SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
IM001 |
Dieser Treiber unterstützt diese Funktion nicht. | (DM) Der dem StatementHandle zugeordnete Treiber unterstützt die Funktion nicht. |
IM017 |
Die Abrufung ist im asynchronen Benachrichtigungsmodus deaktiviert. | Immer wenn das Benachrichtigungsmodell verwendet wird, ist die Abrufung deaktiviert. |
IM018 |
SQLCompleteAsync wurde nicht aufgerufen, um den vorherigen asynchronen Vorgang für dieses Handle abzuschließen. |
Wenn der vorherige Funktionsaufruf des Handles zurückgibt SQL_STILL_EXECUTING und der Benachrichtigungsmodus aktiviert ist, SQLCompleteAsync muss für das Handle nach der Verarbeitung aufgerufen und der Vorgang abgeschlossen werden. |
Kommentare
SQLStatistics gibt Informationen zu einer einzelnen Tabelle als Standardergebnissatz zurück, sortiert nach NON_UNIQUE, , TYPE, INDEX_QUALIFIER, INDEX_NAMEund ORDINAL_POSITION. Das Resultset kombiniert Statistikinformationen (in den CARDINALITY Und PAGES Spalten des Resultsets) für die Tabelle mit Informationen zu jedem Index. Informationen dazu, wie diese Informationen verwendet werden können, finden Sie unter Verwendung von Katalogdaten.
Um die tatsächlichen Längen der TABLE_CAT, , , TABLE_NAMEund COLUMN_NAME Spalten zu bestimmen, kann eine Anwendung mit den SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, , SQL_MAX_TABLE_NAME_LENund SQL_MAX_COLUMN_NAME_LEN Optionen aufrufen SQLGetInfoTABLE_SCHEM.
Hinweis
Weitere Informationen zur allgemeinen Verwendung, zu Argumenten und zurückgegebenen Daten von ODBC-Katalogfunktionen finden Sie unter Katalogfunktionen.
Die folgenden Spalten wurden für ODBC 3.x umbenannt. Die Spaltennamenänderungen wirken sich nicht auf die Abwärtskompatibilität aus, da Anwendungen nach Spaltennummer gebunden sind.
| ODBC 2.0-Spalte | ODBC 3.x-Spalte |
|---|---|
TABLE_QUALIFIER |
TABLE_CAT |
TABLE_OWNER |
TABLE_SCHEM |
SEQ_IN_INDEX |
ORDINAL_POSITION |
COLLATION |
ASC_OR_DESC |
In der folgenden Tabelle sind die Spalten im Resultset aufgeführt. Zusätzliche Spalten, die über Spalte 13 (FILTER_CONDITION) hinausgehen, können vom Treiber definiert werden. Eine Anwendung sollte Zugriff auf treiberspezifische Spalten erhalten, indem sie vom Ende des Resultsets heruntergezählt werden, anstatt eine explizite Ordnungsposition anzugeben. Weitere Informationen finden Sie unter "Von Katalogfunktionen zurückgegebene Daten".
| Spaltenname | Spaltennummer | Datentyp | Kommentare |
|---|---|---|---|
TABLE_CAT (ODBC 1.0) |
1 | varchar | Katalogname der Tabelle, für die die Statistik oder der Index gilt; NULL falls nicht auf die Datenquelle anwendbar. Wenn ein Treiber Kataloge für einige Tabellen, aber nicht für andere unterstützt, z. B. wenn der Treiber Daten aus verschiedenen DBMSs abruft, gibt er eine leere Zeichenfolge ("") für diese Tabellen zurück, die nicht über Kataloge verfügen. |
TABLE_SCHEM (ODBC 1.0) |
2 | varchar | Schemaname der Tabelle, für die die Statistik oder der Index gilt; NULL falls nicht auf die Datenquelle anwendbar. Wenn ein Treiber Schemas für einige Tabellen unterstützt, aber nicht für andere, z. B. wenn der Treiber Daten aus verschiedenen DBMSs abruft, gibt er eine leere Zeichenfolge ("") für diese Tabellen zurück, die keine Schemas besitzen. |
TABLE_NAME (ODBC 1.0) |
3 |
varchar not NULL |
Tabellenname der Tabelle, auf die die Statistik oder der Index angewendet wird. |
NON_UNIQUE (ODBC 1.0) |
4 | smallint | Gibt an, ob der Index keine doppelten Werte zulässt:SQL_TRUE wenn die Indexwerte nicht ununique sein können.SQL_FALSE wenn die Indexwerte eindeutig sein müssen.NULL wird zurückgegeben, wenn TYPE dies der Wert ist SQL_TABLE_STAT. |
INDEX_QUALIFIER (ODBC 1.0) |
5 | varchar | Der Bezeichner, der zum Qualifizieren des Indexnamens verwendet wird, der einen DROP INDEX; NULL ausführt, wird zurückgegeben, wenn ein Indexqualifizierer von der Datenquelle nicht unterstützt wird oder wenn TYPE dies der Wert ist SQL_TABLE_STAT. Wenn ein Wert ungleich NULL in dieser Spalte zurückgegeben wird, muss er verwendet werden, um den Indexnamen für eine DROP INDEX Anweisung zu qualifizieren. Andernfalls sollte der TABLE_SCHEM Indexname verwendet werden, um den Indexnamen zu qualifizieren. |
INDEX_NAME (ODBC 1.0) |
6 | varchar | Indexname; NULL wird zurückgegeben, wenn TYPE dies der Wert ist SQL_TABLE_STAT. |
TYPE (ODBC 1.0) |
7 |
smallint nicht NULL |
Art der zurückgegebenen Informationen:SQL_TABLE_STAT gibt eine Statistik für die Tabelle (in der CARDINALITY Tabelle oder PAGES Spalte) an.SQL_INDEX_BTREE gibt einen B-Tree-Index an.SQL_INDEX_CLUSTERED gibt einen gruppierten Index an.SQL_INDEX_CONTENT gibt einen Inhaltsindex an.SQL_INDEX_HASHED gibt einen Hashindex an.SQL_INDEX_OTHER gibt einen anderen Indextyp an. |
ORDINAL_POSITION (ODBC 1.0) |
8 | smallint | Spaltenreihenfolgenummer im Index (beginnend mit 1); NULL wird zurückgegeben, wenn TYPE dies der Wert ist SQL_TABLE_STAT. |
COLUMN_NAME (ODBC 1.0) |
9 | varchar | Spaltenname. Wenn die Spalte auf einem Ausdruck basiert, z SALARY + BENEFITS. B. wird der Ausdruck zurückgegeben. Wenn der Ausdruck nicht bestimmt werden kann, wird eine leere Zeichenfolge zurückgegeben.
NULL wird zurückgegeben, wenn TYPE dies der Wert ist SQL_TABLE_STAT. |
ASC_OR_DESC (ODBC 1.0) |
10 | char(1) | Sortierreihenfolge für die Spalte: "A" für aufsteigend; "D" für absteigend; NULL wird zurückgegeben, wenn die Spaltensortierreihenfolge von der Datenquelle oder falls TYPE nicht unterstützt wird SQL_TABLE_STAT. |
CARDINALITY (ODBC 1.0) |
11 | integer | Kardinalität der Tabelle oder des Indexes; Die Anzahl der Zeilen in der Tabelle, wenn TYPE dies der Wert ist SQL_TABLE_STAT; die Anzahl der eindeutigen Werte im Index, wenn TYPE nicht SQL_TABLE_STAT; NULL wird zurückgegeben, wenn der Wert nicht aus der Datenquelle verfügbar ist. |
PAGES (ODBC 1.0) |
12 | integer | Anzahl der Seiten, die zum Speichern des Indexes oder der Tabelle verwendet werden; Die Anzahl der Seiten für die Tabelle, wenn TYPE dies der Fall ist SQL_TABLE_STAT; die Anzahl der Seiten für den Index ist, wenn TYPE dies nicht SQL_TABLE_STATder Fall ist; NULL wird zurückgegeben, wenn der Wert nicht aus der Datenquelle verfügbar ist oder nicht auf die Datenquelle anwendbar ist. |
FILTER_CONDITION (ODBC 2.0) |
13 | varchar | Wenn der Index ein gefilterter Index ist, ist dies die Filterbedingung, z SALARY > 30000. B. ; wenn die Filterbedingung nicht bestimmt werden kann, ist dies eine leere Zeichenfolge.NULL Wenn der Index kein gefilterter Index ist, kann er nicht bestimmt werden, ob es sich bei dem Index um einen gefilterten Index handelt oder TYPE ob es sich um einen gefilterten Index handelt SQL_TABLE_STAT. |
Wenn die Zeile im Resultset einer Tabelle entspricht, wird TYPE der Treiber auf SQL_TABLE_STAT und legt NON_UNIQUE, auf INDEX_QUALIFIER, , , INDEX_NAME, , ORDINAL_POSITION, COLUMN_NAME, und ASC_OR_DESC auf NULL. Wenn CARDINALITY die Datenquelle nicht verfügbar ist oder PAGES nicht verfügbar ist, legt der Treiber sie auf NULL.
Codebeispiel
Ein Codebeispiel für eine ähnliche Funktion finden Sie unter SQLColumns Function.
Verwandte Funktionen
| Weitere Informationen zu | Artikel |
|---|---|
| Binden eines Puffers an eine Spalte in einem Resultset | SQLBindCol-Funktion |
| Abbrechen der Verarbeitung von Anweisungen | SQLCancel-Funktion |
| Abrufen einer einzelnen Zeile oder eines Datenblocks in eine vorwärtsgerichtete Richtung. | SQLFetch-Funktion |
| Abrufen eines Datenblocks oder Scrollen durch ein Resultset | SQLFetchScroll-Funktion |
| Zurückgeben der Spalten von Fremdschlüsseln | SQLForeignKeys-Funktion |
| Zurückgeben der Spalten eines Primärschlüssels | SQLPrimaryKeys-Funktion |