SQLColumns-Funktion

Konformität
Version eingeführt: ODBC 1.0 Standards Compliance: Open Group

Zusammenfassung
SQLColumns gibt die Liste der Spaltennamen in angegebenen Tabellen zurück. Der Treiber gibt diese Informationen als Resultset für das angegebene StatementHandle zurück.

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, z. B. wenn der Treiber Daten aus verschiedenen Datenbankdatenbanken abruft, gibt eine leere Zeichenfolge ("") die Tabellen an, die keine Kataloge enthalten. CatalogName kann kein Zeichenfolgensuchmuster enthalten.

Hinweis

Wenn das Attribut der SQL_ATTR_METADATA_ID-Anweisung auf SQL_TRUE festgelegt ist, wird CatalogName als Bezeichner behandelt, und die Groß- und Kleinschreibung ist nicht signifikant. Wenn es SQL_FALSE ist, ist CatalogName ein gewöhnliches Argument. es wird wörtlich behandelt, und sein Fall ist von Bedeutung. Weitere Informationen finden Sie unter Argumente in Katalogfunktionen.

NameLength1
[Eingabe] Länge in Zeichen von *CatalogName.

Schemaname
[Eingabe] Zeichenfolgensuchmuster für Schemanamen. Wenn ein Treiber Schemas für einige Tabellen, aber nicht für andere unterstützt, z. B. wenn der Treiber Daten aus verschiedenen Datenbankdatenbanken abruft, gibt eine leere Zeichenfolge ("") die Tabellen ohne Schemas an.

Hinweis

Wenn das Attribut SQL_ATTR_METADATA_ID-Anweisung auf SQL_TRUE festgelegt ist, wird SchemaName als Bezeichner behandelt, und die Groß- und Kleinschreibung ist nicht signifikant. Wenn es SQL_FALSE ist, ist SchemaName ein Musterwertargument. es wird wörtlich behandelt, und sein Fall ist von Bedeutung.

NameLength2
[Eingabe] Länge in Zeichen von *SchemaName.

TableName
[Eingabe] Zeichenfolgensuchmuster für Tabellennamen.

Hinweis

Wenn das Attribut SQL_ATTR_METADATA_ID-Anweisung auf SQL_TRUE festgelegt ist, wird TableName als Bezeichner behandelt, und die Groß- und Kleinschreibung ist nicht signifikant. Wenn es SQL_FALSE ist, ist TableName ein Musterwertargument. es wird wörtlich behandelt, und sein Fall ist von Bedeutung.

NameLength3
[Eingabe] Länge in Zeichen von *TableName.

ColumnName
[Eingabe] Zeichenfolgensuchmuster für Spaltennamen.

Hinweis

Wenn das Attribut der SQL_ATTR_METADATA_ID-Anweisung auf SQL_TRUE festgelegt ist, wird ColumnName als Bezeichner behandelt, und die Groß- und Kleinschreibung ist nicht signifikant. Wenn es SQL_FALSE ist, ist ColumnName ein Musterwertargument. es wird wörtlich behandelt, und sein Fall ist von Bedeutung.

NameLength4
[Eingabe] Länge in Zeichen von *ColumnName.

Gibt zurück

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR oder SQL_INVALID_HANDLE.

Diagnose

Wenn SQLColumns SQL_ERROR oder SQL_SUCCESS_WITH_INFO zurückgibt, kann ein zugeordneter SQLSTATE-Wert abgerufen werden, indem SQLGetDiagRec mit einem HandleType von SQL_HANDLE_STMT und einem Handle of StatementHandle aufgerufen wird. In der folgenden Tabelle sind die SQLSTATE-Werte aufgeführt, die normalerweise von SQLColumns zurückgegeben werden, und die einzelnen Werte werden im Kontext dieser Funktion erläutert. die Notation "(DM)" geht den Beschreibungen von SQLSTATEs voran, die vom Treiber-Manager zurückgegeben werden. Der rückgabecode, der jedem SQLSTATE-Wert zugeordnet ist, ist SQL_ERROR, sofern nicht anders angegeben.

SQLSTATE Fehler BESCHREIBUNG
01000 Allgemeine Warnung Treiberspezifische Informationsmeldung. (Die Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
08S01 Kommunikationslinkfehler Die Kommunikationsverbindung zwischen dem Treiber und der Datenquelle, mit der der Treiber verbunden war, ist fehlgeschlagen, bevor die Verarbeitung der Funktion abgeschlossen wurde.
24.000 Ungültiger Cursorstatus Im StatementHandle war ein Cursor geöffnet, und SQLFetch oder SQLFetchScroll wurde aufgerufen. Dieser Fehler wird vom Treiber-Manager zurückgegeben, wenn SQLFetch oder SQLFetchScroll nicht SQL_NO_DATA zurückgegeben hat, und wird vom Treiber zurückgegeben, wenn SQLFetch oder SQLFetchScroll SQL_NO_DATA zurückgegeben hat.

Im StatementHandle war ein Cursor geöffnet, aber SQLFetch oder SQLFetchScroll wurden nicht aufgerufen.
40001 Serialisierungsfehler Die Transaktion wurde aufgrund eines Ressourcen-Deadlocks mit einer anderen Transaktion zurückgesetzt.
40003 Anweisungsabschluss unbekannt Bei der zugehörigen Verbindung ist während der Ausführung dieser Funktion ein Fehler aufgetreten, 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 kein implementierungsspezifischer SQLSTATE-Wert definiert wurde. Die von SQLGetDiagRec im *MessageText-Puffer zurückgegebene Fehlermeldung beschreibt den Fehler und seine Ursache.
HY001 Fehler bei der Speicherbelegung Der Treiber konnte arbeitsspeicher nicht zuordnen, der für die Unterstützung der Ausführung oder Vervollständigung der Funktion erforderlich ist.
HY008 Vorgang abgebrochen Für statementHandle wurde die asynchrone Verarbeitung aktiviert. Die Funktion wurde aufgerufen, und bevor die Ausführung abgeschlossen wurde, wurde SQLCancel oder SQLCancelHandle für die AnweisungHandle aufgerufen. Dann wurde die Funktion erneut auf der StatementHandle aufgerufen.

Die Funktion wurde aufgerufen, und bevor sie die Ausführung abgeschlossen hat, wurde SQLCancel oder SQLCancelHandle auf der StatementHandle von einem anderen Thread in einer Multithreadanwendung aufgerufen.
HY009 Ungültige Verwendung von NULL-Zeiger Das SQL_ATTR_METADATA_ID-Anweisungsattribut wurde auf SQL_TRUE festgelegt, das CatalogName-Argument war ein NULL-Zeiger, und die SQL_CATALOG_NAME InfoType gibt zurück, dass Katalognamen unterstützt werden.

(DM) Das Attribut SQL_ATTR_METADATA_ID-Anweisung wurde auf SQL_TRUE festgelegt, und das Argument SchemaName, TableName oder ColumnName war ein NULL-Zeiger.
HY010 Funktionssequenzfehler (DM) Eine asynchron ausgeführte Funktion wurde für das Verbindungshandle aufgerufen, das dem StatementHandle zugeordnet ist. Diese asynchrone Funktion wurde noch ausgeführt, 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 Funktion) wurde für das StatementHandle aufgerufen und wurde weiterhin ausgeführt, als diese Funktion aufgerufen wurde.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations oder SQLSetPos wurde für die StatementHandle aufgerufen und SQL_NEED_DATA zurückgegeben. Diese Funktion wurde aufgerufen, bevor Daten für alle Daten bei der Ausführung gesendet wurden.
HY013 Fehler bei der Speicherverwaltung Der Funktionsaufruf konnte nicht verarbeitet werden, da auf die zugrunde liegenden Speicherobjekte nicht zugegriffen werden konnte, möglicherweise aufgrund von niedrigen Speicherbedingungen.
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 Namenslängenargumente hat den maximalen Längenwert für den entsprechenden Katalog oder Namen überschritten. Die maximale Länge jedes Katalogs oder Namens kann durch Aufrufen von SQLGetInfo mit den InfoType-Werten abgerufen werden. (Siehe "Kommentare".)
HY117 Die Verbindung wird aufgrund eines unbekannten Transaktionsstatus angehalten. Nur trenn- und schreibgeschützte Funktionen sind zulässig. (DM) Weitere Informationen zum angehaltenen Zustand finden Sie unter SQLEndTran-Funktion.
HYC00 Optionales Feature nicht implementiert Es wurde ein Katalogname angegeben, und der Treiber oder die Datenquelle unterstützt keine Kataloge.

Es wurde ein Schemaname angegeben, und der Treiber oder die Datenquelle unterstützt keine Schemas.

Für den Schemanamen, Tabellennamen oder Spaltennamen wurde ein Zeichenfolgensuchmuster angegeben, und die Datenquelle unterstützt keine Suchmuster für eines oder mehrere dieser Argumente.

Die Kombination aus den aktuellen Einstellungen des SQL_ATTR_CONCURRENCY- und SQL_ATTR_CURSOR_TYPE-Anweisungsattributes wurde vom Treiber oder der Datenquelle nicht unterstützt.

Das SQL_ATTR_USE_BOOKMARKS-Anweisungsattribut 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 abgelaufen Der Abfragetimeoutzeitraum ist abgelaufen, bevor die Datenquelle das Resultset zurückgegeben hat. Der Timeoutzeitraum wird über SQLSetStmtAttr festgelegt, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Verbindungstimeout abgelaufen Der Zeitraum für das Verbindungstimeout ist abgelaufen, bevor die Datenquelle auf die Anforderung geantwortet hat. Der Verbindungstimeoutzeitraum wird über SQLSetConnectAttr festgelegt, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Treiber unterstützt diese Funktion nicht. (DM) Der Der StatementHandle zugeordnete Treiber unterstützt die Funktion nicht.
IM017 Abruf ist im asynchronen Benachrichtigungsmodus deaktiviert. Wenn das Benachrichtigungsmodell verwendet wird, wird die Abfrage 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 Nachverarbeitung durchzuführen und den Vorgang abzuschließen.

Kommentare

Diese Funktion wird in der Regel vor der Anweisungsausführung verwendet, um Informationen zu Spalten für eine Tabelle oder Tabellen aus dem Katalog der Datenquelle abzurufen. SQLColumns können verwendet werden, um Daten für alle Typen von Elementen abzurufen, die von SQLTables zurückgegeben werden. Zusätzlich zu Basistabellen kann dies Sichten, Synonyme, Systemtabellen usw. enthalten (ist jedoch nicht beschränkt auf). Im Gegensatz dazu beschreiben die Funktionen SQLColAttribute und SQLDescribeCol die Spalten in einem Resultset, und die Funktion SQLNumResultCols gibt die Anzahl der Spalten in einem Resultset zurück. Weitere Informationen finden Sie unter Verwendung von Katalogdaten.

Hinweis

Weitere Informationen zur allgemeinen Verwendung, zu Argumenten und zurückgegebenen Daten von ODBC-Katalogfunktionen finden Sie unter Katalogfunktionen.

SQLColumns gibt die Ergebnisse als Standardresultset zurück, geordnet nach TABLE_CAT, TABLE_SCHEM, TABLE_NAME und ORDINAL_POSITION.

Hinweis

Wenn eine Anwendung mit odbc 2 arbeitet. x-Treiber , keine ORDINAL_POSITION Spalte im Resultset zurückgegeben wird. Daher, wenn Sie mit ODBC 2 arbeiten. x-Treiber : Die Reihenfolge der Spalten in der Spaltenliste, die von SQLColumns zurückgegeben wird, entspricht nicht unbedingt der Reihenfolge der zurückgegebenen Spalten, wenn die Anwendung eine SELECT-Anweisung für alle Spalten in dieser Tabelle ausführt.

Hinweis

SQLColumns gibt möglicherweise nicht alle Spalten zurück. Beispielsweise gibt ein Treiber möglicherweise keine Informationen zu Pseudospalten zurück, z. B. 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. SqlColumns gibt beispielsweise nicht die Spalten in einem Index zurück, der über einen Ausdruck oder Filter erstellt wurde, z. B. SALARY + BENEFITS oder DEPT = 0012.

Die Längen der VARCHAR-Spalten werden in der Tabelle nicht angezeigt. die tatsächliche Länge hängt von der Datenquelle ab. Um die tatsächliche Länge 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 wirken sich nicht auf die Abwärtskompatibilität aus, da Anwendungen anhand der Spaltennummer gebunden werden.

ODBC 2.0-Spalte ODBC 3. x-Spalte
TABLE_QUALIFIER TABLE_CAT
TABLE_OWNER TABLE_SCHEM
PRECISION COLUMN_SIZE
LENGTH BUFFER_LENGTH
SCALE DECIMAL_DIGITS
RADIX NUM_PREC_RADIX

Die folgenden Spalten wurden dem Resultset hinzugefügt, das von SQLColumns für ODBC 3 zurückgegeben wird. 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 wird, anstatt eine explizite Ordnungsposition anzugeben. Weitere Informationen finden Sie unter Von Katalogfunktionen zurückgegebene Daten.

Spaltenname Column

number
Datentyp Kommentare
TABLE_CAT (ODBC 1.0) 1 Varchar Katalogname; NULL, wenn 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 DBMS abruft, gibt er eine leere Zeichenfolge ("") für die Tabellen zurück, die keine Kataloge enthalten.
TABLE_SCHEM (ODBC 1.0) 2 Varchar Schemaname; NULL, wenn 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 DBMS abruft, gibt er eine leere Zeichenfolge ("") für die Tabellen zurück, die keine Schemas haben.
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 Zeichenfolge für eine Spalte ohne Namen zurück.
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 die Datentypen datetime und interval gibt diese Spalte den prägnanten Datentyp zurück (z. B. SQL_TYPE_DATE oder SQL_INTERVAL_YEAR_TO_MONTH anstelle des nicht koncise-Datentyps wie SQL_DATETIME oder SQL_INTERVAL). Eine Liste der gültigen ODBC SQL-Datentypen finden Sie unter SQL-Datentypen in Anhang D: Datentypen. Informationen zu treiberspezifischen SQL-Datentypen finden Sie in der Dokumentation des Treibers.

Die für ODBC 3 zurückgegebenen Datentypen. 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; beispielsweise "CHAR", "VARCHAR", "MONEY", "LONG VARBINAR" oder "CHAR ( ) FOR BIT DATA".
COLUMN_SIZE (ODBC 1.0) 7 Integer Wenn DATA_TYPE SQL_CHAR oder SQL_VARCHAR ist, enthält diese Spalte die maximale Länge in Zeichen der Spalte. Bei datetime-Datentypen ist dies die Gesamtzahl der Zeichen, die erforderlich sind, um den Wert anzuzeigen, wenn er in Zeichen konvertiert wird. Bei numerischen Datentypen ist dies entweder die Gesamtzahl der Ziffern oder die Gesamtzahl der in der Spalte zulässigen Bits gemäß der NUM_PREC_RADIX Spalte. Bei Intervalldatentypen ist dies die Anzahl der Zeichen in der Zeichendarstellung des Intervallliterals (wie durch die intervallführende Genauigkeit definiert, siehe Länge des Intervalldatentyps in Anhang D: Datentypen). Weitere Informationen finden Sie unter Spaltengröße, Dezimalstellen, Übertragungs oktettlänge und Anzeigegröße in Anhang D: Datentypen.
BUFFER_LENGTH (ODBC 1.0) 8 Integer Die Länge der Daten in Bytes, die für einen SQLGetData-, SQLFetch- oder SQLFetchScroll-Vorgang übertragen werden, wenn SQL_C_DEFAULT angegeben ist. Bei numerischen Daten kann diese Größe von der Größe der in der Datenquelle gespeicherten Daten abweichen. Dieser Wert kann sich von COLUMN_SIZE Spalte für Zeichendaten unterscheiden. Weitere Informationen zur Länge finden Sie unter Spaltengröße, Dezimalstellen, Übertragungs oktettlänge und Anzeigegröße in Anhang D: Datentypen.
DECIMAL_DIGITS (ODBC 1.0) 9 Smallint Die Gesamtzahl der signifikanten Ziffern rechts neben dem Dezimalzeichen. Für SQL_TYPE_TIME und SQL_TYPE_TIMESTAMP enthält diese Spalte die Anzahl der Ziffern in der Sekundenbruchteilkomponente. Bei den 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 neben dem Dezimalpunkt (Sekundenbruchteile). Für Intervalldatentypen, die keine Zeitkomponente enthalten, ist diese Spalte 0. Weitere Informationen zu Dezimalstellen finden Sie unter Spaltengröße, Dezimalstellen, Übertragungs oktettlä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 zulässigen Dezimalstellen an. Beispielsweise würde eine DECIMAL(12,5)-Spalte einen NUM_PREC_RADIX von 10, einen COLUMN_SIZE von 12 und einen DECIMAL_DIGITS von 5 zurückgeben; Eine FLOAT-Spalte könnte eine NUM_PREC_RADIX von 10, eine COLUMN_SIZE von 15 und eine DECIMAL_DIGITS von NULL zurückgeben.

Wenn es 2 ist, geben die Werte in COLUMN_SIZE und DECIMAL_DIGITS die Anzahl der in der Spalte zulässigen Bits an. Beispielsweise könnte eine FLOAT-Spalte einen RADIX-Wert von 2, einen COLUMN_SIZE von 53 und einen 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, wenn 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 Wert, der für die IS_NULLABLE Spalte zurückgegeben wird. Die NULLABLE-Spalte gibt mit Sicherheit an, dass eine Spalte NULLs akzeptieren kann, aber nicht mit Sicherheit angeben kann, dass eine Spalte keine NULLs akzeptiert. Die IS_NULLABLE Spalte gibt mit Sicherheit an, dass eine Spalte keine NULLs akzeptieren kann, aber nicht mit Sicherheit angeben kann, dass eine Spalte NULLs akzeptiert.
HINWEISE (ODBC 1.0) 12 Varchar Eine Beschreibung der Spalte.
COLUMN_DEF (ODBC 3.0) 13 Varchar Der Standardwert der Spalte. Der Wert in dieser Spalte sollte als Zeichenfolge interpretiert werden, wenn er in Anführungszeichen eingeschlossen ist.

Wenn NULL als Standardwert angegeben wurde, ist diese Spalte das Wort NULL, das nicht in Anführungszeichen eingeschlossen ist. Wenn der Standardwert nicht ohne Abschneiden dargestellt werden kann, enthält diese Spalte TRUNCATED, ohne einzelne Anführungszeichen einzuschließen. Wenn kein Standardwert angegeben wurde, ist diese Spalte NULL.

Der Wert von COLUMN_DEF kann zum 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 angezeigt wird. Dies kann ein ODBC SQL-Datentyp oder ein treiberspezifischer SQL-Datentyp sein. Diese Spalte ist mit der spalte DATA_TYPE identisch, mit Ausnahme der Datentypen datetime und interval. Diese Spalte gibt den Nichtkonzisendatentyp (z. B. SQL_DATETIME oder SQL_INTERVAL) anstelle des prägnanten Datentyps (z. B. SQL_TYPE_DATE oder SQL_INTERVAL_YEAR_TO_MONTH) für die Datentypen datetime und interval zurück. Wenn diese Spalte SQL_DATETIME oder SQL_INTERVAL zurückgibt, kann der spezifische Datentyp aus der SQL_DATETIME_SUB Spalte bestimmt werden. Eine Liste der gültigen ODBC SQL-Datentypen finden Sie unter SQL-Datentypen in Anhang D: Datentypen. Informationen zu treiberspezifischen SQL-Datentypen finden Sie in der Dokumentation des Treibers.

Die für ODBC 3 zurückgegebenen Datentypen. 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 die Datentypen datetime und interval. Für andere Datentypen gibt diese Spalte einen NULL-Wert zurück. Weitere Informationen zu datetime- und Intervalluntercodes finden Sie unter "SQL_DESC_DATETIME_INTERVAL_CODE" in SQLSetDescField.
CHAR_OCTET_LENGTH (ODBC 3.0) 16 Integer Die maximale Länge in Bytes einer Spalte eines Zeichen- oder binären Datentyps. Bei allen anderen Datentypen gibt diese Spalte einen NULL-Wert zurück.
ORDINAL_POSITION (ODBC 3.0) 17 Integer nicht NULL Die Ordnungsposition einer Spalte innerhalb der Tabelle. Die erste Spalte in der Tabelle ist Die Zahl 1.
IS_NULLABLE (ODBC 3.0) 18 Varchar "NO", wenn die Spalte keine NULLs enthält.

"JA", wenn die Spalte NULLs enthalten kann.

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 DBMS nach ISO SQL kann keine leere Zeichenfolge zurückgeben.

Der für diese Spalte zurückgegebene Wert unterscheidet sich von dem Wert, der für die NULLABLE-Spalte zurückgegeben wird. (Siehe Beschreibung der NULLABLE-Spalte.)

Codebeispiel

Im folgenden Beispiel deklariert eine Anwendung Puffer für das von SQLColumns zurückgegebene Resultset. Es ruft SQLColumns auf, um ein Resultset zurückzugeben, das jede Spalte in der EMPLOYEE-Tabelle beschreibt. Anschließend wird SQLBindCol aufgerufen, um die Spalten im Resultset 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;  
        */  
      }  
   }  
}  
Informationen über Finden Sie unter
Binden eines Puffers an eine Spalte in einem Resultset SQLBindCol-Funktion
Abbrechen der Anweisungsverarbeitung SQLCancel-Funktion
Zurückgeben von Berechtigungen für eine Spalte oder Spalten SQLColumnPrivileges-Funktion
Abrufen eines Datenblocks oder Scrollen durch ein Resultset SQLFetchScroll-Funktion
Abrufen mehrerer Datenzeilen SQLFetch-Funktion
Zurückgeben von Spalten, die eine Zeile eindeutig identifizieren, oder Spalten, die automatisch von einer Transaktion aktualisiert werden SQLSpecialColumns-Funktion
Zurückgeben von Tabellenstatistiken und Indizes SQLStatistics-Funktion
Zurückgeben einer Liste von Tabellen in einer Datenquelle SQLTables-Funktion
Zurückgeben von Berechtigungen für eine Tabelle oder Tabellen SQLTablePrivileges-Funktion

Weitere Informationen

ODBC-API-Referenz
ODBC-Headerdateien