Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
Powiązane funkcje
| 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 |