SQLColumns, funkcja

Zgodność
Wprowadzona wersja: Zgodność standardów ODBC 1.0: Open Group

Podsumowanie
SQLColumns zwraca listę nazw kolumn w określonych tabelach. Sterownik zwraca te informacje jako zestaw wyników na określonym CommandHandle.

Syntax

  
SQLRETURN SQLColumns(  
     SQLHSTMT       StatementHandle,  
     SQLCHAR *      CatalogName,  
     SQLSMALLINT    NameLength1,  
     SQLCHAR *      SchemaName,  
     SQLSMALLINT    NameLength2,  
     SQLCHAR *      TableName,  
     SQLSMALLINT    NameLength3,  
     SQLCHAR *      ColumnName,  
     SQLSMALLINT    NameLength4);  

Arguments

StatementHandle
[Dane wejściowe] Uchwyt instrukcji.

CatalogName
[Dane wejściowe] Nazwa wykazu. Jeśli sterownik obsługuje katalogi dla niektórych tabel, ale nie dla innych, na przykład gdy pobiera dane z różnych DBMS, pusty ciąg ("") wskazuje te tabele, które nie mają katalogów. CatalogName nie może zawierać wzorca wyszukiwania w ciągu znaków.

Note

Jeśli atrybut SQL_ATTR_METADATA_ID instrukcji jest ustawiony na SQL_TRUE, CatalogName jest traktowany jako identyfikator i jego przypadek nie jest istotny. Jeśli jest SQL_FALSE, CatalogName to zwykły argument; Jest traktowany dosłownie, a jego sprawa jest znacząca. Aby uzyskać więcej informacji, zobacz Argumenty w funkcjach wykazu.

NameLength1
[Input] Długość w znakach *KatalogNazwa.

NazwaSchematu
[Input] Wzorzec wyszukiwania znaków dla nazw schematów. Jeśli sterownik obsługuje schematy dla niektórych tabel, ale nie dla innych, na przykład gdy pobiera dane z różnych DBMS, pusty ciąg ("") wskazuje te tabele, które nie mają schematów.

Note

Jeśli atrybut SQL_ATTR_METADATA_ID instrukcji jest ustawiony na SQL_TRUE, SchemaName jest traktowany jako identyfikator i jego przypadek nie jest istotny. Jeśli jest to SQL_FALSE, SchemaName jest argumentem wartości wzorca; Jest traktowany dosłownie, a jego sprawa jest znacząca.

NameLength2
[Input] Długość w znakach *SchemaName.

TableName
[Input] Wzorzec wyszukiwania w ciągu ciągów dla nazw tabel.

Note

Jeśli atrybut SQL_ATTR_METADATA_ID instrukcji jest ustawiony na SQL_TRUE, TableName traktowany jest jako identyfikator i jego przypadek nie jest istotny. Jeśli jest SQL_FALSE, TableName jest argumentem wartości wzorca; Jest traktowany dosłownie, a jego sprawa jest znacząca.

NameLength3
[Input] Długość w znakach *TableName.

Nazwakolumny
[Dane wejściowe] Wzorzec wyszukiwania ciągów dla nazw kolumn.

Note

Jeśli atrybut instrukcji SQL_ATTR_METADATA_ID jest ustawiony na SQL_TRUE, Nazwakolumny jest traktowana jako identyfikator, a jego wielkość nie jest znacząca. Jeśli jest SQL_FALSE, Nazwakolumny jest argumentem wartości wzorca; jest traktowany dosłownie, a jego przypadek jest znaczący.

NameLength4
[Dane wejściowe] Długość znaków *Nazwakolumny.

Zwroty

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR lub SQL_INVALID_HANDLE.

Diagnostyka

Gdy SQLColumns zwraca SQL_ERROR lub SQL_SUCCESS_WITH_INFO, powiązaną wartość SQLSTATE można uzyskać, wywołując SQLGetDiagRec z HandleType SQL_HANDLE_STMT oraz HandleStatementHandle. Poniższa tabela przedstawia wartości SQLSTATE zwykle zwracane przez SQLColumns i wyjaśnia każdą z nich w kontekście tej funkcji; notacja "(DM)" poprzedza opisy stanów SQL zwracanych przez Menedżera Sterowników. Kod zwracany skojarzony z każdą wartością SQLSTATE jest SQL_ERROR, chyba że określono inaczej.

SQLSTATE Error Description
01000 Ostrzeżenie ogólne Komunikat informacyjny specyficzny dla sterownika. (Funkcja zwraca SQL_SUCCESS_WITH_INFO).
08S01 Błąd połączenia komunikacyjnego Połączenie komunikacyjne między sterownikiem a źródłem danych, z którym sterownik został połączony, nie powiodło się przed zakończeniem przetwarzania funkcji.
24000 Nieprawidłowy stan kursora Na StatementHandle był otwarty kursor, a wywołano SQLFetch lub SQLFetchScroll . Ten błąd jest zwracany przez Menedżera sterowników, jeśli funkcja SQLFetch lub SQLFetchScroll nie zwróciła SQL_NO_DATA i jest zwracana przez sterownik, jeśli funkcja SQLFetch lub SQLFetchScroll zwróciła SQL_NO_DATA.

Kursor był otwarty na StatementHandle , ale SQLFetch ani SQLFetchScroll nie zostały wywołane.
40001 Niepowodzenie serializacji Transakcja została wycofana z powodu zakleszczenia zasobów z inną transakcją.
40003 Ukończenie instrukcji nieznane Skojarzone połączenie nie powiodło się podczas wykonywania tej funkcji, a nie można określić stanu transakcji.
HY000 Błąd ogólny Wystąpił błąd, dla którego nie było określonego stanu SQLSTATE i dla którego nie zdefiniowano parametru SQLSTATE specyficznego dla implementacji. Komunikat o błędzie zwrócony przez element SQLGetDiagRec w buforze *MessageText opisuje błąd i jego przyczynę.
HY001 Błąd alokacji pamięci Sterownik nie może przydzielić pamięci wymaganej do obsługi wykonywania lub ukończenia funkcji.
HY008 Operacja anulowana Przetwarzanie asynchroniczne zostało włączone dla instrukcji StatementHandle. Wywołano funkcję , a przed zakończeniem wykonywania wywołano metodę SQLCancel lub SQLCancelHandle w obiekcie StatementHandle. Następnie funkcja została ponownie wywołana w instrukcji StatementHandle.

Wywołano funkcję , a przed zakończeniem wykonywania wywołano funkcję SQLCancel lub SQLCancelHandle na instrukcjiHandle z innego wątku w aplikacji wielowątku.
HY009 Nieprawidłowe użycie wskaźnika o wartości null Atrybut SQL_ATTR_METADATA_ID instrukcji był ustawiony na SQL_TRUE, argument CatalogName był wskaźnikiem zerowym, a SQL_CATALOG_NAME InfoType zwraca, że nazwy katalogów są obsługiwane.

(DM) Atrybut SQL_ATTR_METADATA_ID instrukcji był ustawiony na SQL_TRUE, a argumenty SchemaName, TableName lub ColumnName były wskaźnikiem null.
HY010 Błąd sekwencji funkcji (DM) Asynchronicznie wykonywana funkcja została wywołana dla dojścia połączenia skojarzonego z instrukcją StatementHandle. Ta asynchroniczna funkcja nadal działała, gdy wywoływano funkcję SQLColumns .

(DM) SqlExecute, SQLExecDirect lub SQLMoreResults została wywołana dla instrukcji StatementHandle i zwrócona SQL_PARAM_DATA_AVAILABLE. Ta funkcja została wywołana przed pobraniem danych dla wszystkich parametrów przesyłanych strumieniowo.

(DM) Asynchronicznie wykonująca funkcję (a nie tę) została wywołana dla instrukcji StatementHandle i nadal była wykonywana, gdy ta funkcja została wywołana.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations lub SQLSetPos został wywołany dla instrukcjiHandle i zwrócił SQL_NEED_DATA. Ta funkcja została wywołana przed wysłaniem danych dla wszystkich parametrów wykonywania danych lub kolumn.
HY013 Błąd zarządzania pamięcią Nie można przetworzyć wywołania funkcji, ponieważ nie można uzyskać dostępu do bazowych obiektów pamięci, prawdopodobnie z powodu niskich warunków pamięci.
HY090 Nieprawidłowa długość ciągu lub buforu (DM) Wartość jednego z argumentów długości nazw była mniejsza niż 0, ale nie równa SQL_NTS.
Wartość jednego z argumentów długości nazwy przekroczyła maksymalną wartość długości dla odpowiedniego katalogu lub nazwy. Maksymalną długość każdego katalogu lub nazwy można uzyskać, wywołując SQLGetInfo z wartościami InfoType . (Zobacz "Komentarze.")
HY117 Połączenie jest zawieszone z powodu nieznanego stanu transakcji. Dozwolone są tylko funkcje rozłączania i tylko do odczytu. (DM) Aby uzyskać więcej informacji na temat stanu wstrzymania, zobacz SQLEndTran, funkcja.
HYC00 Opcjonalna funkcja nie zaimplementowana Określono nazwę katalogu, a sterownik lub źródło danych nie obsługuje katalogów.

Określono nazwę schematu, a sterownik lub źródło danych nie obsługuje schematów.

Dla nazwy schematu, tabeli lub nazwy kolumny określono wzorzec wyszukiwania łańcuchów znaków, a źródło danych nie obsługuje wzorców wyszukiwania dla jednego lub więcej z tych argumentów.

Kombinacja bieżących ustawień SQL_ATTR_CONCURRENCY i atrybutów instrukcji SQL_ATTR_CURSOR_TYPE nie była obsługiwana przez sterownik lub źródło danych.

Atrybut instrukcji SQL_ATTR_USE_BOOKMARKS został ustawiony na SQL_UB_VARIABLE, a atrybut instrukcji SQL_ATTR_CURSOR_TYPE został ustawiony na typ kursora, dla którego sterownik nie obsługuje zakładek.
HYT00 Upłynął limit czasu Okres przekroczenia limitu czasu zapytania wygasł przed zwróceniem zestawu wyników przez źródło danych. Limit czasu jest ustawiany za pomocą metody SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Upłynął limit czasu połączenia Okres przekroczenia limitu czasu połączenia wygasł, zanim źródło danych odpowiedziało na żądanie. Limit czasu połączenia jest ustawiany za pomocą parametru SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Sterownik nie obsługuje tej funkcji (DM) Sterownik skojarzony z instrukcją StatementHandle nie obsługuje funkcji.
IM017 Sondowanie jest wyłączone w trybie powiadomień asynchronicznych Za każdym razem, gdy jest używany model powiadomień, sondowanie jest wyłączone.
IM018 Funkcja SQLCompleteAsync nie została wywołana w celu ukończenia poprzedniej operacji asynchronicznej na tym dojściu. Jeśli poprzednie wywołanie funkcji na dojściu zwraca SQL_STILL_EXECUTING i jeśli tryb powiadomień jest włączony, narzędzie SQLCompleteAsync musi być wywoływane na dojściu, aby wykonać przetwarzanie końcowe i zakończyć operację.

Comments

Funkcja ta jest zazwyczaj używana przed wykonaniem instrukcji do pobierania informacji o kolumnach tabeli lub tabel z katalogu źródła danych. SQLColumns może być używany do pobierania danych dla wszystkich typów elementów zwracanych przez SQLTables. Oprócz tabel bazowych, może to obejmować (ale nie ogranicza się do) widoków, synonimów, tabel systemowych i tak dalej. Dla porównania, funkcje SQLColAttribute i SQLDescribeCol opisują kolumny w zbiorze wyników, a funkcja SQLNumResultCols zwraca liczbę kolumn w zbiorze wyników. Aby uzyskać więcej informacji, zobacz Użycie danych wykazu.

Note

Aby uzyskać więcej informacji na temat ogólnego użycia, argumentów i zwracanych danych funkcji wykazu ODBC, zobacz Funkcje wykazu.

SQLColumns zwraca wyniki jako standardowy zbiór wyników, uporządkowany przez TABLE_CAT, TABLE_SCHEM, TABLE_NAME i ORDINAL_POSITION.

Note

Gdy aplikacja działa z ODBC 2. x driver, w zbiorze wyników nie zwraca się kolumny ORDINAL_POSITION. W związku z tym, pracując z ODBC 2. x driverów, kolejność kolumn w liście kolumn zwracanej przez SQLColumns niekoniecznie jest taka sama jak kolejność kolumn zwracanych po wykonaniu przez aplikację polecenia SELECT na wszystkich kolumnach w tej tabeli.

Note

SQLColumns może nie zwracać wszystkich kolumn. Na przykład sterownik może nie zwracać informacji o pseudokolumnach, takich jak Oracle ROWID. Aplikacje mogą używać dowolnej poprawnej kolumny, niezależnie od tego, czy jest ona zwracana przez SQLColumns.

Niektóre kolumny, które mogą być zwrócone przez SQLStatistics , nie są zwracane przez SQLColumns. Na przykład SQLColumns nie zwraca kolumn w indeksie utworzonym przez wyrażenie lub filtr, takich jak SALARY + BENEFITS lub DEPT = 0012.

Długości kolumn VARCHAR nie są pokazane w tabeli; rzeczywiste długości zależą od źródła danych. Aby określić rzeczywiste długości kolumn TABLE_CAT, TABLE_SCHEM, TABLE_NAME i COLUMN_NAME, aplikacja może wywołać SQLGetInfo z opcjami SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN i SQL_MAX_COLUMN_NAME_LEN.

Następujące kolumny zostały przemianowane na ODBC 3. x. Zmiany nazw kolumn nie wpływają na kompatybilność wsteczną, ponieważ aplikacje wiążą się według numeru kolumny.

Kolumna ODBC 2.0 ODBC 3. x kolumna
TABLE_QUALIFIER TABLE_CAT
WŁAŚCICIEL TABELI TABLE_SCHEM
PRECYZJA ROZMIAR_KOLUMNY
DŁUGOŚĆ BUFFER_LENGTH
SKALA CYFRA DZIESIĘTNA
PODSTAWA NUM_PREC_RADIX

Do zestawu wyników zwracanego przez SQLColumns dla ODBC 3 dodano następujące kolumny. x:

CHAR_OCTET_LENGTH
COLUMN_DEF

CZY_MOŻNA_NULL
POZYCJA_PORZĄDKOWA

SQL_DATA_TYPE
SQL_DATETIME_SUB

W poniższej tabeli wymieniono kolumny w zestawie wyników. Dodatkowe kolumny poza kolumną 18 (IS_NULLABLE) mogą być definiowane przez sterownika. Aplikacja powinna uzyskać dostęp do kolumn specyficznych dla sterownika przez odliczanie od końca zestawu wyników zamiast określania jawnej pozycji porządkowej. Aby uzyskać więcej informacji, zobacz Dane zwrócone przez funkcje wykazu.

Nazwa kolumny Column

number
Typ danych Comments
TABLE_CAT (ODBC 1.0) 1 Varchar Nazwa katalogu; NULL, jeśli nie dotyczy źródła danych. Jeśli sterownik obsługuje katalogi dla niektórych tabel, ale nie dla innych, na przykład gdy pobiera dane z różnych DBMS, zwraca pusty ciąg ("") dla tych tabel, które nie mają katalogów.
TABLE_SCHEM (ODBC 1.0) 2 Varchar Nazwa schematu; NULL, jeśli nie dotyczy źródła danych. Jeśli sterownik obsługuje schematy dla niektórych tabel, ale nie dla innych, na przykład gdy pobiera dane z różnych DBMS, zwraca pusty ciąg ("") dla tych tabel, które nie mają schematów.
TABLE_NAME (ODBC 1.0) 3 Varchar, a nie NULL Nazwa tabeli.
COLUMN_NAME (ODBC 1.0) 4 Varchar, a nie NULL Nazwa kolumny. Sterownik zwraca pusty ciąg znaków dla kolumny, która nie ma nazwy.
DATA_TYPE (ODBC 1.0) 5 Smallint, nie NULL Typ danych SQL. Może to być typ danych SQL ODBC lub typ danych SQL specyficzny dla sterownika. Dla typów danych datetime i interwałów ta kolumna zwraca zwięzły typ danych (np. SQL_TYPE_DATE lub SQL_INTERVAL_YEAR_TO_MONTH, zamiast niezwięzłego typu danych, takiego jak SQL_DATETIME czy SQL_INTERVAL). Listę ważnych typów danych SQL ODBC można znaleźć w artykule Typy danych SQL w Załączniku D: Typy danych. Aby uzyskać informacje o typach danych SQL specyficznych dla sterownika, zobacz dokumentację sterownika.

Typy danych zwrócone dla ODBC 3. x i ODBC 2. X Applications może być inny. Aby uzyskać więcej informacji, zobacz Zgodność z poprzednimi wersjami i zgodność ze standardami.
TYPE_NAME (ODBC 1.0) 6 Varchar, a nie NULL Nazwa typu danych zależna od źródła danych; na przykład "CHAR", "VARCHAR", "MONEY", "LONG VARBINAR" lub "CHAR ( ) DLA DANYCH BITOWYCH".
COLUMN_SIZE (ODBC 1.0) 7 Integer Jeśli DATA_TYPE jest SQL_CHAR lub SQL_VARCHAR, ta kolumna zawiera maksymalną długość w znakach kolumny. Dla typów danych datowego czasu jest to całkowita liczba znaków potrzebna do wyświetlenia wartości po konwersji na znaki. Dla typów danych numerycznych jest to albo całkowita liczba cyfr, albo całkowita liczba bitów dozwolonych w kolumnie, zgodnie z kolumną NUM_PREC_RADIX. W przypadku typów danych interwałowych jest to liczba znaków w reprezentacji literalu interwałowego (zdefiniowanego przez precyzję prowadzącą interwał, zobacz Długość typu danych interwału w Załączniku D: Typy danych). Więcej informacji można znaleźć w artykule Column Size, Decimal Digits, Transfer Octet Length oraz Display Size w Załączniku D: Typy danych.
BUFFER_LENGTH (ODBC 1.0) 8 Integer Długość danych przesyłanych w bajtach podczas operacji SQLGetData, SQLFetch lub SQLFetchScroll, jeśli SQL_C_DEFAULT jest wskazana. W przypadku danych numerycznych ten rozmiar może różnić się od rozmiaru danych przechowywanych na źródle danych. Ta wartość może się różnić od kolumny COLUMN_SIZE danych o postaci. Więcej informacji o długości można znaleźć w artykule Column Size, Decimal Digits, Transfer Octet Length oraz Display Size w Załączniku D: Typy danych.
DECIMAL_DIGITS (ODBC 1.0) 9 Smallint Całkowita liczba cyfr znaczących po prawej stronie przecinka dziesiętnego. Dla SQL_TYPE_TIME i SQL_TYPE_TIMESTAMP kolumna ta zawiera liczbę cyfr w składowej sekund ułamkowych. Dla pozostałych typów danych są to cyfry dziesiętne kolumny na źródle danych. Dla typów danych przedziałowych zawierających składową czasową, ta kolumna zawiera liczbę cyfr po prawej stronie przecinka (ułamki sekund). Dla typów danych przedziałowych, które nie zawierają składowej czasu, ta kolumna wynosi 0. Więcej informacji o cyfrach dziesiętnych można znaleźć w artykule Column Size, Decimal Digits, Transfer Octet Length oraz Display Size w Załączniku D: Typy danych. NULL jest zwracany dla typów danych, gdzie DECIMAL_DIGITS nie ma zastosowania.
NUM_PREC_RADIX (ODBC 1.0) 10 Smallint W przypadku typów danych liczbowych 10 lub 2. Jeśli wynosi 10, wartości w COLUMN_SIZE i DECIMAL_DIGITS dają liczbę cyfr dziesiętnych dozwolonych dla kolumny. Na przykład kolumna DECIMAL(12,5) zwróci NUM_PREC_RADIX z 10, COLUMN_SIZE 12 i DECIMAL_DIGITS 5; kolumna FLOAT może zwrócić NUM_PREC_RADIX z 10, COLUMN_SIZE 15 i DECIMAL_DIGITS wartości NULL.

Jeśli jest to 2, wartości w COLUMN_SIZE i DECIMAL_DIGITS dają liczbę dozwolonych bitów w kolumnie. Na przykład kolumna FLOAT może zwracać RADIX 2, COLUMN_SIZE 53 oraz DECIMAL_DIGITS NULL.

Wartość NULL jest zwracana dla typów danych, w których NUM_PREC_RADIX nie ma zastosowania.
NULLABLE (ODBC 1.0) 11 Smallint, nie NULL SQL_NO_NULLS jeśli kolumna nie mogłaby zawierać wartości NULL.

SQL_NULLABLE jeśli kolumna akceptuje wartości NULL.

SQL_NULLABLE_UNKNOWN jeśli nie wiadomo, czy kolumna akceptuje wartości NULL.

Wartość zwracana dla tej kolumny różni się od wartości zwracanej dla kolumny IS_NULLABLE. Kolumna NULLABLE oznacza z całą pewnością, że kolumna może akceptować NULL, ale nie może z całą pewnością wskazać, że kolumna nie akceptuje NULL. Kolumna IS_NULLABLE wskazuje z całą pewnością, że kolumna nie może akceptować NULL, ale nie może z całą pewnością wskazać, że kolumna akceptuje NULL.
UWAGI (ODBC 1.0) 12 Varchar Opis kolumny.
COLUMN_DEF (ODBC 3.0) 13 Varchar Wartość domyślna kolumny. Wartość w tej kolumnie powinna być interpretowana jako ciąg znaków, jeśli jest otoczona cudzysłowem.

Jeśli wartość NULL została określona jako wartość domyślna, ta kolumna jest słowem NULL, a nie jest ujęta w cudzysłów. Jeśli wartość domyślna nie może być reprezentowana bez obcięcia, ta kolumna zawiera PRZYCIĘTE, bez dołączania pojedynczych cudzysłowów. Jeśli nie określono wartości domyślnej, ta kolumna ma wartość NULL.

Wartość COLUMN_DEF może służyć do generowania nowej definicji kolumny, z wyjątkiem sytuacji, gdy zawiera wartość TRUNCATED.
SQL_DATA_TYPE (ODBC 3.0) 14 Smallint, nie NULL Typ danych SQL, jak pojawia się w polu SQL_DESC_TYPE rekordu w IRD. Może to być typ danych SQL ODBC lub typ danych SQL specyficzny dla sterownika. Ta kolumna jest taka sama jak kolumna DATA_TYPE, z wyjątkiem typów danych typu data/godzina i interwał. Ta kolumna zwraca niezwięzły typ danych (np. SQL_DATETIME lub SQL_INTERVAL), zamiast zwięzłego typu danych (np. SQL_TYPE_DATE lub SQL_INTERVAL_YEAR_TO_MONTH) dla typów danych datetime i interwałów. Jeśli ta kolumna zwraca SQL_DATETIME lub SQL_INTERVAL, konkretny typ danych można określić na podstawie kolumny SQL_DATETIME_SUB. Listę ważnych typów danych SQL ODBC można znaleźć w artykule Typy danych SQL w Załączniku D: Typy danych. Aby uzyskać informacje o typach danych SQL specyficznych dla sterownika, zobacz dokumentację sterownika.

Typy danych zwrócone dla ODBC 3. x i ODBC 2. X Applications może być inny. Aby uzyskać więcej informacji, zobacz Zgodność z poprzednimi wersjami i zgodność ze standardami.
SQL_DATETIME_SUB (ODBC 3.0) 15 Smallint Kod podtypu dla typów danych typu data/godzina i interwał. W przypadku innych typów danych ta kolumna zwraca wartość NULL. Aby uzyskać więcej informacji o datetime i interwałach podkodów zobacz "SQL_DESC_DATETIME_INTERVAL_CODE" w SQLSetDescField.
CHAR_OCTET_LENGTH (ODBC 3.0) 16 Integer Maksymalna długość w bajtach kolumny typu danych lub znaku binarnego. W przypadku wszystkich innych typów danych ta kolumna zwraca wartość NULL.
ORDINAL_POSITION (ODBC 3.0) 17 Liczba całkowita nie ma wartości NULL Pozycja porządkowa kolumny w tabeli. Pierwsza kolumna w tabeli to numer 1.
IS_NULLABLE (ODBC 3.0) 18 Varchar "NIE", jeśli kolumna nie zawiera NULLs.

"TAK", jeśli kolumna mogłaby zawierać NULL.

Ta kolumna zwraca ciąg o zerowej długości, jeśli nieznana jest nieważność.

Stosuje się zasady ISO w celu określenia nieważności. System DBMS zgodny ze specyfikacją SQL ISO nie może zwrócić pustego ciągu.

Wartość zwracana dla tej kolumny różni się od wartości zwróconej dla kolumny NULLABLE. (Zobacz opis kolumny NULLABLE).

Przykład kodu

W poniższym przykładzie aplikacja deklaruje bufory dla zbioru wyników zwracanego przez SQLColumns. Wywołuje SQLColumns , aby zwrócić zestaw wyników opisujący każdą kolumnę w tabeli EMPLOYEE. Następnie wywołuje SQLBindCol , aby powiązać kolumny w zestawie wyników z buforami. Na koniec aplikacja pobiera każdy wiersz danych za pomocą SQLFetch i przetwarza go.

// 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;  
        */  
      }  
   }  
}  
Aby uzyskać informacje o Zobacz
Wiązanie buforu z kolumną w zestawie wyników SQLBindCol, funkcja
Anulowanie przetwarzania instrukcji SQLCancel, funkcja
Zwracanie uprawnień dla kolumny lub kolumn Funkcja SQLColumnPrivileges
Pobieranie bloku danych lub przewijanie zestawu wyników SQLFetchScroll, funkcja
Pobieranie wielu wierszy danych SQLFetch, funkcja
Zwracanie kolumn jednoznacznie identyfikujących wiersz lub kolumn automatycznie aktualizowanych przez transakcję Funkcja SQLSpecialColumns
Statystyki i indeksy w tabeli zwracającej Funkcja SQLStatistics
Zwracanie listy tabel w źródle danych Funkcja SQLTables
Przywracanie uprawnień dla tabeli lub tabel Funkcja SQLTablePrivileges