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;
*/
}
}
}
Verwandte Funktionen
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 |