SQLPrimaryKeys, funkcja

Zgodność
Wprowadzona wersja: Zgodność ze standardami ODBC 1.0: ODBC

Podsumowanie
SQLPrimaryKeys zwraca nazwy kolumn tworzące klucz główny tabeli. Sterownik zwraca informacje w zestawie wyników. Funkcja ta nie obsługuje zwracania kluczy głównych z wielu tabel w jednym wywołaniu.

Syntax

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

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 ("") oznacza te tabele, które nie mają katalogów. CatalogName nie może zawierać wzorca wyszukiwania w ciągu znaków.

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
[Dane wejściowe] Nazwa schematu. 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 ("") oznacza te tabele, które nie mają schematów. SchemaName nie może zawierać wzorca wyszukiwania w ciągu znaków.

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 SQL_FALSE, SchemaName jest zwykłym argumentem; Jest traktowana dosłownie, a jej przypadek nie ma znaczenia.

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

TableName
[Dane wejściowe] Nazwa tabeli. Ten argument nie może być punktem zerowym. TableName nie może zawierać wzorca wyszukiwania w ciągu znaków.

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 zwykłym argumentem; Jest traktowana dosłownie, a jej przypadek nie ma znaczenia.

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

Zwroty

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR lub SQL_INVALID_HANDLE.

Diagnostyka

Gdy SQLPrimaryKeys zwraca SQL_ERROR lub SQL_SUCCESS_WITH_INFO, można uzyskać powiązaną wartość SQLSTATE, wywołując SQLGetDiagRec za pomocą HandleType SQL_HANDLE_STMT oraz HandleStatementHandle. Poniższa tabela przedstawia wartości SQLSTATE najczęściej zwracane przez SQLPrimaryKeys 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 (DM) Kursor był otwarty na CommandHandle i wywołano SQLFetch lub SQLFetchScroll .

Kursor był otwarty na StatementHandle, ale SQLFetch ani SQLFetchScroll nie były wywoływane.
40001 Niepowodzenie serializacji Transakcja została wycofana z powodu zakleszczenia zasobu 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 (DM) Argument TableName był pointerem zerowym.

Atrybut SQL_ATTR_METADATA_ID instrukcji był ustawiony na SQL_TRUE, argument CatalogName był wskaźnikiem zerowym, a SQLGetInfo z SQL_CATALOG_NAME typu informacyjnego zwraca, że obsługiwane są nazwy katalogów.

(DM) Atrybut SQL_ATTR_METADATA_ID instrukcji był ustawiony na SQL_TRUE, a argument SchemaName był wskaźnikiem zerowym.
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ę SQLPrimaryKeys .

(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 nazwy była mniejsza niż 0, ale nie równa SQL_NTS, a powiązany argument nazwy nie jest wskaźnikiem zerowym.

Wartość jednego z argumentów długości nazwy przekroczyła maksymalną wartość długości odpowiadającej mu nazwy.
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 katalog, a sterownik lub źródło danych nie obsługuje katalogów.

Schemat został określony, a sterownik lub źródło danych nie obsługuje schemató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 czasu wygasł zanim źródło danych zwróciło żądany zestaw wyników. 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

SQLPrimaryKeys zwraca wyniki jako standardowy zbiór wyników, uporządkowany według TABLE_CAT, TABLE_SCHEM, TABLE_NAME i KEY_SEQ. Aby uzyskać informacje o sposobie korzystania z tych informacji, zobacz Korzystanie z danych wykazu.

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

Aby określić rzeczywiste długości kolumn TABLE_CAT, TABLE_SCHEM, TABLE_NAME i COLUMN_NAME, zadzwoń do SQLGetInfo z opcjami SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN i SQL_MAX_COLUMN_NAME_LEN.

Note

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

W poniższej tabeli wymieniono kolumny w zestawie wyników. Dodatkowe kolumny poza kolumną 6 (PK_NAME) mogą być definiowane przez kierowcę. Aplikacja powinna uzyskać dostęp do kolumn specyficznych dla sterownika, odliczając od końca zbioru wyników, zamiast określać wyraźną pozycję porządkową. Aby uzyskać więcej informacji, zobacz Dane zwrócone przez funkcje wykazu.

Nazwa kolumny Numer kolumny Typ danych Comments
TABLE_CAT (ODBC 1.0) 1 Varchar Główna nazwa katalogu tabeli kluczy; 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 podstawowej tabeli kluczy; 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 klucza podstawowego.
COLUMN_NAME (ODBC 1.0) 4 Varchar, a nie NULL Nazwa kolumny klucza głównego. Sterownik zwraca pusty ciąg znaków dla kolumny, która nie ma nazwy.
KEY_SEQ (ODBC 1.0) 5 Smallint, nie NULL Numer sekwencji kolumny w tonacji (zaczynając od 1).
PK_NAME (ODBC 2.0) 6 Varchar Nazwa klucza głównego. NULL, jeśli nie dotyczy źródła danych.

Przykład kodu

Zobacz SQLForeignKeys.

Aby uzyskać informacje o Zobacz
Wiązanie buforu z kolumną w zestawie wyników SQLBindCol, funkcja
Anulowanie przetwarzania instrukcji SQLCancel, funkcja
Pobieranie bloku danych lub przewijanie zestawu wyników SQLFetchScroll, funkcja
Pobieranie pojedynczego wiersza lub bloku danych w kierunku tylko do przodu SQLFetch, funkcja
Zwracanie kolumn kluczy obcych SQLForeignKeys, funkcja
Statystyki i indeksy w tabeli zwracającej Funkcja SQLStatistics