Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Konformität
Eingeführte Version: ODBC 1.0 Standards Compliance: Open Group
Summary
SQLColumns liefert die Liste der Spaltennamen in den angegebenen Tabellen. Der Treiber gibt diese Information als Ergebnis zurück, das auf dem angegebenen StatementHandle gesetzt ist.
Syntax
SQLRETURN SQLColumns(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3,
SQLCHAR * ColumnName,
SQLSMALLINT NameLength4);
Argumente
StatementHandle
[Eingabe] Anweisungshandle.
Catalogname
[Eingabe] Katalogname. Wenn ein Treiber Kataloge für einige Tabellen, aber nicht für andere unterstützt, etwa wenn der Treiber Daten aus verschiedenen DBMS abruft, zeigt eine leere Zeichenkette ("") jene Tabellen an, die keine Kataloge besitzen.
CatalogName kann kein String-Suchmuster enthalten.
Note
Wenn das Attribut SQL_ATTR_METADATA_ID Statement auf SQL_TRUE gesetzt ist, wird CatalogName als Identifikator behandelt und sein Fall ist nicht signifikant. Wenn es SQL_FALSE ist, ist CatalogName ein gewöhnliches Argument; Es wird wörtlich behandelt, und sein Fall ist bedeutsam. Weitere Informationen finden Sie unter Argumente in Katalogfunktionen.
NameLength1
[Eingabe] Länge in den Zeichen von *CatalogName.
SchemaName
[Eingabe] Zeichenkettensuchmuster für Schemanamen. Wenn ein Treiber Schemata für einige Tabellen, aber für andere nicht unterstützt, etwa wenn der Treiber Daten aus verschiedenen DBMS abruft, zeigt eine leere Zeichenkette ("") jene Tabellen an, die keine Schemata enthalten.
Note
Wenn das Attribut SQL_ATTR_METADATA_ID Statement auf SQL_TRUE gesetzt ist, wird SchemaName als Identifikator behandelt und sein Fall ist nicht signifikant. Wenn es SQL_FALSE ist, ist SchemaName ein Musterwert-Argument; Es wird wörtlich behandelt, und sein Fall ist bedeutsam.
NameLength2
[Eingabe] Länge in den Zeichen von *SchemaName.
Tabellenname
[Eingabe] String-Suchmuster für Tabellennamen.
Note
Wenn das Attribut SQL_ATTR_METADATA_ID Statement auf SQL_TRUE gesetzt ist, wird TableName als Identifikator behandelt und sein Fall ist nicht signifikant. Wenn es SQL_FALSE ist, ist TableName ein Musterwert-Argument; Es wird wörtlich behandelt, und sein Fall ist bedeutsam.
NameLength3
[Eingabe] Länge in den Zeichen von *TableName.
ColumnName
[Eingabe] String-Suchmuster für Spaltennamen.
Note
Wenn das Attribut der SQL_ATTR_METADATA_ID-Anweisung auf SQL_TRUE gesetzt ist, wird ColumnName als Identifikator behandelt und sein Fall ist nicht signifikant. Wenn es SQL_FALSE ist, ist ColumnName ein Musterwert-Argument; Es wird wörtlich behandelt, und sein Fall ist bedeutsam.
NameLength4
[Eingabe] Länge in den Zeichen von *ColumnName.
Rücklieferungen
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR oder SQL_INVALID_HANDLE.
Diagnostics
Wenn SQLColumns SQL_ERROR oder SQL_SUCCESS_WITH_INFO zurückgibt, kann ein zugehöriger SQLSTATE-Wert erhalten werden, indem SQLGetDiagRec mit einem HandleType von SQL_HANDLE_STMT und einem Handle von StatementHandle aufgerufen wird. Die folgende Tabelle listet die SQLSTATE-Werte auf, die typischerweise von SQLColumns zurückgegeben werden, und erklärt jeden einzelnen im Kontext dieser Funktion; die Notation "(DM)" geht den vom Treibermanager zurückgegebenen SQLSTATE-Beschreibungen voraus. Der rückgabecode, der jedem SQLSTATE-Wert zugeordnet ist, ist SQL_ERROR, sofern nicht anders angegeben.
| SQLSTATE | Fehler | Description |
|---|---|---|
| 01000 | Allgemeiner Warnhinweis | Treiberspezifische Informationsmeldung. (Funktion gibt SQL_SUCCESS_WITH_INFO zurü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 Cursorstatus | Ein Cursor war auf dem StatementHandle geöffnet, und SQLFetch oder SQLFetchScroll war aufgerufen worden. Dieser Fehler wird vom Treiber-Manager zurückgegeben, wenn SQLFetch oder SQLFetchScroll nicht SQL_NO_DATA zurückgegeben hat und vom Treiber zurückgegeben wird, wenn SQLFetch oder SQLFetchScroll SQL_NO_DATA zurückgegeben wurde. Ein Cursor war auf dem StatementHandle geöffnet, aber SQLFetch oder SQLFetchScroll waren nicht aufgerufen worden. |
| 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-Wert vorhanden war und für den keine implementierungsspezifische SQLSTATE definiert wurde. Die von SQLGetDiagRec im *MessageText-Puffer zurückgegebene Fehlermeldung beschreibt den Fehler und dessen 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, wurde SQLCancel oder SQLCancelHandle für die Anweisungshandle aufgerufen. Anschließend wurde die Funktion erneut für " StatementHandle" aufgerufen. Die Funktion wurde aufgerufen, und bevor sie die Ausführung abgeschlossen hat, wurde SQLCancel oder SQLCancelHandle für das StatementHandle von einem anderen Thread in einer Multithreadanwendung aufgerufen. |
| HY009 | Ungültige Verwendung des Nullzeigers | Das Attribut SQL_ATTR_METADATA_ID Statement wurde auf SQL_TRUE gesetzt, das CatalogName-Argument war ein Nullzeiger, und der SQL_CATALOG_NAME InfoType gibt an, dass Katalognamen unterstützt werden. (DM) Das Attribut SQL_ATTR_METADATA_ID Anweisung wurde auf SQL_TRUE gesetzt, und das SchemaName-, TableName- oder ColumnName-Argument war ein Nullzeiger. |
| HY010 | Funktionssequenzfehler | (DM) Eine asynchron ausgeführte Funktion wurde für den Verbindungshandle aufgerufen, der dem StatementHandle zugeordnet ist. Diese asynchrone Funktion lief noch, als die SQLColumns-Funktion aufgerufen wurde. (DM) SQLExecute, SQLExecDirect oder SQLMoreResults wurde für " StatementHandle " aufgerufen und SQL_PARAM_DATA_AVAILABLE zurückgegeben. 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, SQLBulkOperations oder SQLSetPos wurde für " StatementHandle " aufgerufen und SQL_NEED_DATA zurückgegeben. 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 Namenslängenargumente war kleiner als 0, aber nicht gleich SQL_NTS. |
| Der Wert eines der Größenlängenargumente überschritt den maximalen Längenwert für den entsprechenden Katalog oder Namen. Die maximale Länge jedes Katalogs oder Namens kann ermittelt werden, indem SQLGetInfo mit den InfoType-Werten aufgerufen wird. (Siehe "Kommentare".) | ||
| 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 Katalogname wurde angegeben, und der Treiber oder die Datenquelle unterstützt keine Kataloge. Ein Schema-Name wurde angegeben, und der Treiber oder die Datenquelle unterstützt keine Schemata. Ein String-Suchmuster wurde für den Schemanamen, den Tabellennamen oder den Spaltennamen angegeben, und die Datenquelle unterstützt keine Suchmuster für eines oder mehrere dieser Argumente. Die Kombination der aktuellen Einstellungen der SQL_ATTR_CONCURRENCY- und SQL_ATTR_CURSOR_TYPE-Anweisungsattribute wurde vom Treiber oder der Datenquelle nicht unterstützt. Das attribut der SQL_ATTR_USE_BOOKMARKS-Anweisung wurde auf SQL_UB_VARIABLE festgelegt, und das Attribut der SQL_ATTR_CURSOR_TYPE-Anweisung wurde auf einen Cursortyp festgelegt, für den der Treiber keine Lesezeichen unterstützt. |
| HYT00 | Timeout überschritten | Der Abfragetimeoutzeitraum ist abgelaufen, bevor die Datenquelle das Resultset zurückgibt. Der Timeoutzeitraum wird über SQLSetStmtAttr SQL_ATTR_QUERY_TIMEOUT festgelegt. |
| HYT01 | Verbindungstimeout abgelaufen | Der Zeitraum für das Verbindungstimeout ist abgelaufen, bevor die Datenquelle auf die Anforderung geantwortet hat. Der Verbindungstimeoutzeitraum wird über SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT festgelegt. |
| 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 für das Handle SQL_STILL_EXECUTING zurückgibt und der Benachrichtigungsmodus aktiviert ist, muss SQLCompleteAsync für das Handle aufgerufen werden, um die Nachbearbeitung durchzuführen und den Vorgang abzuschließen. |
Kommentare
Diese Funktion wird typischerweise vor der Ausführung von Anweisungen verwendet, um Informationen über Spalten für eine Tabelle oder Tabellen aus dem Katalog der Datenquelle abzurufen. SQLColumns können verwendet werden, um Daten für alle Arten von von SQLTables zurückgegebenen Einträgen abzurufen. Neben Basistabellen kann dies (aber nicht beschränkt auf) Ansichten, Synonyme, Systemtabellen und Ähnliches umfassen. Im Gegensatz dazu beschreiben die Funktionen SQLColAttribute und SQLDescribeCol die Spalten in einer Ergebnismenge, und die Funktion SQLNumResultCols liefert die Anzahl der Spalten in einer Ergebnismenge zurück. Weitere Informationen finden Sie unter Verwendung von Katalogdaten.
Note
Weitere Informationen zur allgemeinen Verwendung, zu Argumenten und zurückgegebenen Daten von ODBC-Katalogfunktionen finden Sie unter Katalogfunktionen.
SQLColumns liefert die Ergebnisse als Standardergebnismenge zurück, geordnet nach TABLE_CAT, TABLE_SCHEM, TABLE_NAME und ORDINAL_POSITION.
Note
Wenn eine Anwendung mit einem ODBC 2 funktioniert. x-Treiber wird keine ORDINAL_POSITION Spalte im Ergebnissatz zurückgegeben. Als Folge davon, dass ich mit ODBC 2 gearbeitet habe. x-Treiber ist die Reihenfolge der Spalten in der von SQLColumns zurückgegebenen Spaltenliste nicht notwendigerweise dieselbe wie die Reihenfolge der zurückgegebenen Spalten, wenn die Anwendung eine SELECT-Anweisung für alle Spalten in dieser Tabelle ausführt.
Note
SQLColumns geben möglicherweise nicht alle Spalten zurück. Zum Beispiel liefert ein Treiber möglicherweise keine Informationen über Pseudo-Spalten, wie zum Beispiel Oracle ROWID. Anwendungen können jede gültige Spalte verwenden, unabhängig davon, ob sie von SQLColumns zurückgegeben wird.
Einige Spalten, die von SQLStatistics zurückgegeben werden können, werden von SQLColumns nicht zurückgegeben. Beispielsweise gibt SQLColumns die Spalten in einem über einem Ausdruck oder Filter erstellten Index wie SALARY + BENEFITS oder DEPT = 0012 nicht zurück.
Die Längen der VARCHAR-Säulen sind in der Tabelle nicht angegeben; Die tatsächlichen Längen hängen von der Datenquelle ab. Um die tatsächlichen Längen der Spalten TABLE_CAT, TABLE_SCHEM, TABLE_NAME und COLUMN_NAME zu bestimmen, kann eine Anwendung SQLGetInfo mit den Optionen SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN und SQL_MAX_COLUMN_NAME_LEN aufrufen.
Die folgenden Spalten wurden für ODBC 3 umbenannt. x. Die Änderungen des Spaltennamens beeinflussen die Abwärtskompatibilität nicht, da Anwendungen nach Spaltennummer binden.
| ODBC 2.0-Spalte | ODBC 3. X-Spalte |
|---|---|
| TABLE_QUALIFIER | TABLE_CAT |
| Tabellenbesitzer | TABLE_SCHEM |
| PRECISION | COLUMN_SIZE |
| Länge | BUFFER_LENGTH |
| MAßSTAB | DEZIMALSTELLEN |
| RADIX | NUM_PREC_RADIX |
Die folgenden Spalten wurden dem von SQLColumns für ODBC 3 zurückgegebenen Ergebnisset hinzugefügt. x:
CHAR_OCTET_LENGTH
COLUMN_DEF
IS_NULLABLE
ORDINAL_POSITION
SQL_DATA_TYPE
SQL_DATETIME_SUB
In der folgenden Tabelle sind die Spalten im Resultset aufgeführt. Zusätzliche Spalten über Spalte 18 (IS_NULLABLE) hinaus 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 | Column Zahl |
Datentyp | Kommentare |
|---|---|---|---|
| TABLE_CAT (ODBC 1.0) | 1 | Varchar | Katalogname; NULL, falls es nicht auf die Datenquelle anwendbar ist. Wenn ein Treiber Kataloge für einige Tabellen, aber für andere nicht unterstützt, etwa wenn der Treiber Daten aus verschiedenen DBMSs abruft, gibt er für jene Tabellen, die keine Kataloge haben, eine leere Zeichenkette ("") zurück. |
| TABLE_SCHEM (ODBC 1.0) | 2 | Varchar | Schema-Name; NULL, falls es nicht auf die Datenquelle anwendbar ist. Wenn ein Treiber für einige Tabellen Schemata unterstützt, aber nicht für andere, etwa wenn der Treiber Daten aus verschiedenen DBMS abruft, gibt er für jene Tabellen, die keine Schemata enthalten, eine leere Zeichenkette ("") zurück. |
| TABLE_NAME (ODBC 1.0) | 3 | Varchar nicht NULL | Tabellenname. |
| COLUMN_NAME (ODBC 1.0) | 4 | Varchar nicht NULL | Spaltenname. Der Treiber gibt eine leere Zeichenkette für eine Spalte zurück, die keinen Namen hat. |
| DATA_TYPE (ODBC 1.0) | 5 | Smallint nicht NULL | SQL-Datentyp. Dies kann ein ODBC-SQL-Datentyp oder ein treiberspezifischer SQL-Datentyp sein. Für Date-Time- und Intervall-Datentypen gibt diese Spalte den kompakten Datentyp zurück (wie SQL_TYPE_DATE oder SQL_INTERVAL_YEAR_TO_MONTH, anstelle des nicht-prägnanten Datentyps wie SQL_DATETIME oder SQL_INTERVAL). Eine Liste gültiger ODBC SQL-Datentypen finden Sie in Anhang D: Datentypen in Anhang D: Datentypen. Informationen zu treiberspezifischen SQL-Datentypen finden Sie in der Dokumentation des Treibers. Die Datentypen wurden für ODBC 3 zurückgegeben. x und ODBC 2. X-Anwendungen können unterschiedlich sein. Weitere Informationen finden Sie unter Abwärtskompatibilität und Standardkonformität. |
| TYPE_NAME (ODBC 1.0) | 6 | Varchar nicht NULL | Datenquellenabhängiger Datentypname; zum Beispiel "CHAR", "VARCHAR", "MONEY", "LONG VARBINAR" oder "CHAR ( ) FÜR BITDATEN". |
| COLUMN_SIZE (ODBC 1.0) | 7 | Integer | Ist DATA_TYPE SQL_CHAR oder SQL_VARCHAR, enthält diese Spalte die maximale Länge in Zeichen der Spalte. Für Datetime-Datentypen ist dies die Gesamtzahl der Zeichen, die benötigt werden, um den Wert anzuzeigen, wenn er in Zeichen umgewandelt wird. Für numerische Datentypen ist dies entweder die Gesamtzahl der Ziffern oder die Gesamtzahl der in der Spalte erlaubten Bits, entsprechend der NUM_PREC_RADIX Spalte. Für Intervalldatentypen ist dies die Anzahl der Zeichen in der Zeichendarstellung des Intervallliterals (definiert durch die Intervall-Führungsgenauigkeit, siehe Intervalldatentyplänge im Anhang D: Datentypen). Weitere Informationen finden Sie unter Column Size, Decimal Digits, Transfer Octet Length und Display Size in Anhang D: Datentypen. |
| BUFFER_LENGTH (ODBC 1.0) | 8 | Integer | Die Länge in Bytes der Daten, die bei einer SQLGetData-, SQLFetch- oder SQLFetchScroll-Operation übertragen werden, falls SQL_C_DEFAULT angegeben ist. Für numerische Daten kann diese Größe von der Größe der auf der Datenquelle gespeicherten Daten abweichen. Dieser Wert könnte sich von COLUMN_SIZE Spalte für Zeichendaten unterscheiden. Weitere Informationen zur Länge finden Sie unter Spaltengröße, Dezimalzahlen, Übertragungs-Oktettlänge und Anzeigegröße im Anhang D: Datentypen. |
| DECIMAL_DIGITS (ODBC 1.0) | 9 | Smallint | Die Gesamtzahl der signifikanten Ziffern rechts vom Dezimalpunkt. Für SQL_TYPE_TIME und SQL_TYPE_TIMESTAMP enthält diese Spalte die Anzahl der Ziffern in der Bruchsekundenkomponente. Für die anderen Datentypen sind dies die Dezimalstellen der Spalte in der Datenquelle. Für Intervalldatentypen, die eine Zeitkomponente enthalten, enthält diese Spalte die Anzahl der Ziffern rechts vom Dezimalpunkt (Bruchsekunden). Für Intervalldatentypen, die keine Zeitkomponente enthalten, ist diese Spalte 0. Für weitere Informationen zu Dezimalziffern siehe Spaltengröße, Dezimalziffern, Übertragungs-Oktetlänge und Anzeigegröße in Anhang D: Datentypen. NULL wird für Datentypen zurückgegeben, bei denen DECIMAL_DIGITS nicht anwendbar ist. |
| NUM_PREC_RADIX (ODBC 1.0) | 10 | Smallint | Für numerische Datentypen, entweder 10 oder 2. Wenn es 10 ist, geben die Werte in COLUMN_SIZE und DECIMAL_DIGITS die Anzahl der für die Spalte erlaubten Dezimalziffern an. Beispielsweise würde eine DECIMAL(12,5)-Spalte eine NUM_PREC_RADIX von 10, eine COLUMN_SIZE von 12 und eine DECIMAL_DIGITS von 5 zurückgeben; Eine FLOAT-Spalte kann einen NUM_PREC_RADIX von 10, einen COLUMN_SIZE von 15 und eine DECIMAL_DIGITS von NULL zurückgeben. Ist es 2, geben die Werte in COLUMN_SIZE und DECIMAL_DIGITS die Anzahl der in der Spalte erlaubten Bits an. Zum Beispiel könnte eine FLOAT-Spalte einen RADIX von 2, ein COLUMN_SIZE von 53 und ein DECIMAL_DIGITS von NULL zurückgeben. NULL wird für Datentypen zurückgegeben, bei denen NUM_PREC_RADIX nicht anwendbar ist. |
| NULLABLE (ODBC 1.0) | 11 | Smallint nicht NULL | SQL_NO_NULLS, wenn die Spalte keine NULL-Werte enthalten konnte. SQL_NULLABLE, ob die Spalte NULL-Werte akzeptiert. SQL_NULLABLE_UNKNOWN, wenn nicht bekannt ist, ob die Spalte NULL-Werte akzeptiert. Der für diese Spalte zurückgegebene Wert unterscheidet sich von dem für die IS_NULLABLE Spalte. Die Spalte NULLABLE gibt mit Sicherheit an, dass eine Spalte NULLs akzeptieren kann, kann aber nicht mit Sicherheit angeben, dass eine Spalte keine NULLs akzeptiert. Die IS_NULLABLE-Spalte gibt mit Sicherheit an, dass eine Spalte NULLs nicht akzeptieren kann, aber nicht mit Sicherheit, dass eine Spalte NULLs akzeptiert. |
| BEMERKUNGEN (ODBC 1.0) | 12 | Varchar | Eine Beschreibung der Kolumne. |
| COLUMN_DEF (ODBC 3.0) | 13 | Varchar | Der Standardwert der Spalte. Der Wert in dieser Spalte sollte als Zeichenkette interpretiert werden, wenn er in Anführungszeichen eingefasst ist. Wenn NULL als Standardwert angegeben wurde, ist diese Spalte das Wort NULL, nicht in Anführungszeichen eingeschlossen. Wenn der Standardwert nicht ohne Trunkierung dargestellt werden kann, enthält diese Spalte ABGESCHNITTEN, ohne einzelne Anführungszeichen einzuschließen. Wenn kein Standardwert angegeben wurde, ist diese Spalte NULL. Der Wert von COLUMN_DEF kann beim Generieren einer neuen Spaltendefinition verwendet werden, es sei denn, er enthält den Wert TRUNCATED. |
| SQL_DATA_TYPE (ODBC 3.0) | 14 | Smallint nicht NULL | SQL-Datentyp, wie er im Feld SQL_DESC_TYPE Datensatz im IRD erscheint. Dies kann ein ODBC-SQL-Datentyp oder ein treiberspezifischer SQL-Datentyp sein. Diese Spalte ist mit der DATA_TYPE Spalte identisch, mit Ausnahme von Datums- und Intervalldatentypen. Diese Spalte gibt den nicht-kompakten Datentyp (wie SQL_DATETIME oder SQL_INTERVAL) zurück, anstelle des kompakten Datentyps (wie SQL_TYPE_DATE oder SQL_INTERVAL_YEAR_TO_MONTH) für Datums- und Intervalldaten. Wenn diese Spalte SQL_DATETIME oder SQL_INTERVAL zurückgibt, kann der spezifische Datentyp aus der SQL_DATETIME_SUB Spalte bestimmt werden. Eine Liste gültiger ODBC SQL-Datentypen finden Sie in Anhang D: Datentypen in Anhang D: Datentypen. Informationen zu treiberspezifischen SQL-Datentypen finden Sie in der Dokumentation des Treibers. Die Datentypen wurden für ODBC 3 zurückgegeben. x und ODBC 2. X-Anwendungen können unterschiedlich sein. Weitere Informationen finden Sie unter Abwärtskompatibilität und Standardkonformität. |
| SQL_DATETIME_SUB (ODBC 3.0) | 15 | Smallint | Der Untertypcode für Datums- und Intervalldatentypen. Bei anderen Datentypen gibt diese Spalte einen NULL-Wert zurück. Weitere Informationen zu Date-Time- und Intervall-Subcodes finden Sie unter "SQL_DESC_DATETIME_INTERVAL_CODE" in SQLSetDescField. |
| CHAR_OCTET_LENGTH (ODBC 3.0) | 16 | Integer | Die maximale Länge in Byte eines Zeichens oder einer Binärdatentypspalte. Für alle anderen Datentypen gibt diese Spalte einen NULL-Wert zurück. |
| ORDINAL_POSITION (ODBC 3.0) | 17 | Ganze Zahl nicht NULL | Die Ordnungsposition der Spalte in der Tabelle. Die erste Spalte in der Tabelle ist Nummer 1. |
| IS_NULLABLE (ODBC 3.0) | 18 | Varchar | "NEIN", wenn die Spalte keine NULLs enthält. "JA", wenn die Spalte NULLs enthalten könnte. Die Spalte gibt eine leere Zeichenfolge zurück, wenn die NULL-Zulässigkeit unbekannt ist. Die NULL-Zulässigkeit wird gemäß den ISO-Regeln bestimmt. Ein ISO SQL-kompatibles DBMS kann keine leere Zeichenfolge zurückgeben. Der für diese Spalte zurückgegebene Wert unterscheidet sich von dem für die NULLABLE-Spalte. (Siehe Beschreibung der SPALTE NULLABLE.) |
Codebeispiel
Im folgenden Beispiel deklariert eine Anwendung Puffer für die von SQLColumns zurückgegebene Ergebnismenge. Es ruft SQLColumns auf, um eine Ergebnismenge zurückzugeben, die jede Spalte in der EMPLOYEE-Tabelle beschreibt. Anschließend ruft es SQLBindCol auf, um die Spalten im Ergebnisset an die Puffer zu binden. Schließlich ruft die Anwendung jede Datenzeile mit SQLFetch ab und verarbeitet sie.
// SQLColumns_Function.cpp
// compile with: ODBC32.lib
#include <windows.h>
#include <sqlext.h>
#define STR_LEN 128 + 1
#define REM_LEN 254 + 1
// Declare buffers for result set data
SQLCHAR szSchema[STR_LEN];
SQLCHAR szCatalog[STR_LEN];
SQLCHAR szColumnName[STR_LEN];
SQLCHAR szTableName[STR_LEN];
SQLCHAR szTypeName[STR_LEN];
SQLCHAR szRemarks[REM_LEN];
SQLCHAR szColumnDefault[STR_LEN];
SQLCHAR szIsNullable[STR_LEN];
SQLINTEGER ColumnSize;
SQLINTEGER BufferLength;
SQLINTEGER CharOctetLength;
SQLINTEGER OrdinalPosition;
SQLSMALLINT DataType;
SQLSMALLINT DecimalDigits;
SQLSMALLINT NumPrecRadix;
SQLSMALLINT Nullable;
SQLSMALLINT SQLDataType;
SQLSMALLINT DatetimeSubtypeCode;
SQLHSTMT hstmt = NULL;
// Declare buffers for bytes available to return
SQLINTEGER cbCatalog;
SQLINTEGER cbSchema;
SQLINTEGER cbTableName;
SQLINTEGER cbColumnName;
SQLINTEGER cbDataType;
SQLINTEGER cbTypeName;
SQLINTEGER cbColumnSize;
SQLLEN cbBufferLength;
SQLINTEGER cbDecimalDigits;
SQLINTEGER cbNumPrecRadix;
SQLINTEGER cbNullable;
SQLINTEGER cbRemarks;
SQLINTEGER cbColumnDefault;
SQLINTEGER cbSQLDataType;
SQLINTEGER cbDatetimeSubtypeCode;
SQLINTEGER cbCharOctetLength;
SQLINTEGER cbOrdinalPosition;
SQLINTEGER cbIsNullable;
int main() {
SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT hstmt = 0;
SQLRETURN retcode;
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
retcode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);
retcode = SQLConnect(hdbc, (SQLCHAR*) "Northwind", SQL_NTS, (SQLCHAR*) NULL, 0, NULL, 0);
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
retcode = SQLColumns(hstmt, NULL, 0, NULL, 0, (SQLCHAR*)"CUSTOMERS", SQL_NTS, NULL, 0);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
// Bind columns in result set to buffers
SQLBindCol(hstmt, 1, SQL_C_CHAR, szCatalog, STR_LEN,&cbCatalog);
SQLBindCol(hstmt, 2, SQL_C_CHAR, szSchema, STR_LEN, &cbSchema);
SQLBindCol(hstmt, 3, SQL_C_CHAR, szTableName, STR_LEN,&cbTableName);
SQLBindCol(hstmt, 4, SQL_C_CHAR, szColumnName, STR_LEN, &cbColumnName);
SQLBindCol(hstmt, 5, SQL_C_SSHORT, &DataType, 0, &cbDataType);
SQLBindCol(hstmt, 6, SQL_C_CHAR, szTypeName, STR_LEN, &cbTypeName);
SQLBindCol(hstmt, 7, SQL_C_SLONG, &ColumnSize, 0, &cbColumnSize);
SQLBindCol(hstmt, 8, SQL_C_SLONG, &BufferLength, 0, &cbBufferLength);
SQLBindCol(hstmt, 9, SQL_C_SSHORT, &DecimalDigits, 0, &cbDecimalDigits);
SQLBindCol(hstmt, 10, SQL_C_SSHORT, &NumPrecRadix, 0, &cbNumPrecRadix);
SQLBindCol(hstmt, 11, SQL_C_SSHORT, &Nullable, 0, &cbNullable);
SQLBindCol(hstmt, 12, SQL_C_CHAR, szRemarks, REM_LEN, &cbRemarks);
SQLBindCol(hstmt, 13, SQL_C_CHAR, szColumnDefault, STR_LEN, &cbColumnDefault);
SQLBindCol(hstmt, 14, SQL_C_SSHORT, &SQLDataType, 0, &cbSQLDataType);
SQLBindCol(hstmt, 15, SQL_C_SSHORT, &DatetimeSubtypeCode, 0, &cbDatetimeSubtypeCode);
SQLBindCol(hstmt, 16, SQL_C_SLONG, &CharOctetLength, 0, &cbCharOctetLength);
SQLBindCol(hstmt, 17, SQL_C_SLONG, &OrdinalPosition, 0, &cbOrdinalPosition);
SQLBindCol(hstmt, 18, SQL_C_CHAR, szIsNullable, STR_LEN, &cbIsNullable);
while (SQL_SUCCESS == retcode) {
retcode = SQLFetch(hstmt);
/*
if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO)
0; // show_error();
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
0; // Process fetched data
else
break;
*/
}
}
}
Verwandte Funktionen
| Weitere Informationen zu | Siehe |
|---|---|
| Binden eines Puffers an eine Spalte in einem Resultset | SQLBindCol-Funktion |
| Abbrechen der Verarbeitung von Anweisungen | SQLCancel-Funktion |
| Rückgabe von Privilegien für eine oder mehrere Spalten | SQLColumnPrivileges-Funktion |
| Abrufen eines Datenblocks oder Scrollen durch ein Resultset | SQLFetchScroll-Funktion |
| Abrufen mehrerer Datenzeilen | SQLFetch-Funktion |
| Zurückgebende Spalten, die eindeutig eine Zeile identifizieren, oder Spalten, die automatisch durch eine Transaktion aktualisiert werden | SQLSpecialColumns-Funktion |
| Rückgabe von Tabellenstatistiken und Indizes | SQLStatistik-Funktion |
| Rückgabe einer Liste von Tabellen in einer Datenquelle | SQLTables-Funktion |
| Rückgabe von Privilegien für eine Tabelle oder mehrere Tabellen | SQLTablePrivileges-Funktion |