SQLPrimaryKeys-Funktion

Konformität
Eingeführte Version: ODBC 1.0 Standards Compliance: ODBC

Summary
SQLPrimaryKeys liefert die Spaltennamen, die den Primärschlüssel einer Tabelle ausmachen. Der Treiber gibt die Informationen als Resultset zurück. Diese Funktion unterstützt keine Rückgabe von Primärschlüsseln aus mehreren Tabellen in einem einzigen Aufruf.

Syntax

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

Argumente

StatementHandle
[Eingabe] Anweisungshandle.

Catalogname
[Eingabe] Katalogname. Wenn ein Treiber Kataloge für einige Tabellen, aber nicht für andere unterstützt, etwa wenn der Treiber Daten aus verschiedenen DBMSs abruft, bezeichnet eine leere Zeichenkette ("") jene Tabellen, die keine Kataloge besitzen. CatalogName kann kein String-Suchmuster enthalten.

Wenn das Attribut SQL_ATTR_METADATA_ID Statement auf SQL_TRUE gesetzt ist, wird CatalogName als Identifikator behandelt und sein Fall ist nicht signifikant. Wenn es SQL_FALSE ist, ist CatalogName ein gewöhnliches Argument; Es wird wörtlich behandelt, und sein Fall ist bedeutsam. Weitere Informationen finden Sie unter Argumente in Katalogfunktionen.

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

SchemaName
[Eingabe] Schemaname. Wenn ein Treiber Schemata für einige Tabellen, aber für andere nicht unterstützt, etwa wenn der Treiber Daten aus verschiedenen DBMSs abruft, bezeichnet eine leere Zeichenkette ("") jene Tabellen, die keine Schemata enthalten. SchemaName kann kein Zeichenkettensuchmuster enthalten.

Wenn das Attribut SQL_ATTR_METADATA_ID Statement auf SQL_TRUE gesetzt ist, wird SchemaName als Identifikator behandelt und sein Fall ist nicht signifikant. Wenn es SQL_FALSE ist, ist SchemaName ein gewöhnliches Argument; Es wird wörtlich behandelt, und sein Fall ist nicht bedeutsam.

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

Tabellenname
[Eingabe] Tabellenname. Dieses Argument kann kein Nullpointer sein. TableName kann kein Zeichenkettensuchmuster enthalten.

Wenn das Attribut SQL_ATTR_METADATA_ID Statement auf SQL_TRUE gesetzt ist, wird TableName als Identifikator behandelt und sein Fall ist nicht signifikant. Wenn es SQL_FALSE ist, ist TableName ein gewöhnliches Argument; Es wird wörtlich behandelt, und sein Fall ist nicht bedeutsam.

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

Rücklieferungen

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR oder SQL_INVALID_HANDLE.

Diagnostics

Wenn SQLPrimaryKeys SQL_ERROR oder SQL_SUCCESS_WITH_INFO zurückgibt, kann ein zugehöriger SQLSTATE-Wert erhalten werden, indem SQLGetDiagRec mit einem HandleType von SQL_HANDLE_STMT und einem Handle von StatementHandle aufgerufen wird. Die folgende Tabelle listet die SQLSTATE-Werte auf, die häufig von SQLPrimaryKeys zurückgegeben werden, und erklärt jeden einzelnen im Kontext dieser Funktion; die Notation "(DM)" geht den vom Treibermanager zurückgegebenen SQLSTATE-Beschreibungen voraus. Der rückgabecode, der jedem SQLSTATE-Wert zugeordnet ist, ist SQL_ERROR, sofern nicht anders angegeben.

SQLSTATE Fehler Description
01000 Allgemeiner Warnhinweis Treiberspezifische Informationsmeldung. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
08S01 Kommunikationslinkfehler Die Kommunikationsverbindung zwischen dem Treiber und der Datenquelle, mit der der Treiber verbunden wurde, ist fehlgeschlagen, bevor die Verarbeitung der Funktion abgeschlossen wurde.
24000 Ungültiger Cursorstatus (DM) Ein Cursor wurde im StatementHandle geöffnet, und SQLFetch oder SQLFetchScroll wurden aufgerufen.

Ein Cursor war auf dem StatementHandle geöffnet, aber SQLFetch oder SQLFetchScroll waren nicht aufgerufen worden.
40001 Serialisierungsfehler Die Transaktion wurde aufgrund eines Ressourcen-Deadlocks mit einer anderen Transaktion zurückgesetzt.
40003 Abschluss der Anweisung unbekannt Fehler bei der zugehörigen Verbindung während der Ausführung dieser Funktion, 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 keine implementierungsspezifische SQLSTATE definiert wurde. Die von SQLGetDiagRec im *MessageText-Puffer zurückgegebene Fehlermeldung beschreibt den Fehler und dessen Ursache.
HY001 Speicherzuweisungsfehler Der Treiber konnte speicher nicht zuordnen, der erforderlich ist, um die Ausführung oder den Abschluss der Funktion zu unterstützen.
HY008 Vorgang abgebrochen Die asynchrone Verarbeitung wurde für " StatementHandle" aktiviert. Die Funktion wurde aufgerufen, und bevor sie die Ausführung abgeschlossen hat, wurde SQLCancel oder SQLCancelHandle für die Anweisungshandle aufgerufen. Anschließend wurde die Funktion erneut für " StatementHandle" aufgerufen.

Die Funktion wurde aufgerufen, und bevor sie die Ausführung abgeschlossen hat, wurde SQLCancel oder SQLCancelHandle für das StatementHandle von einem anderen Thread in einer Multithreadanwendung aufgerufen.
HY009 Ungültige Verwendung des Nullzeigers (DM) Das TableName-Argument war ein Nullzeiger.

Das Attribut SQL_ATTR_METADATA_ID Anweisung wurde auf SQL_TRUE gesetzt, das CatalogName-Argument war ein Nullzeiger, und SQLGetInfo mit dem SQL_CATALOG_NAME Informationstyp gibt an, dass Katalognamen unterstützt werden.

(DM) Das Attribut SQL_ATTR_METADATA_ID-Anweisung wurde auf SQL_TRUE gesetzt, und das SchemaName-Argument war ein Nullzeiger.
HY010 Funktionssequenzfehler (DM) Eine asynchron ausgeführte Funktion wurde für den Verbindungshandle aufgerufen, der dem StatementHandle zugeordnet ist. Diese asynchrone Funktion lief noch, als die SQLPrimaryKeys-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) wurde für das StatementHandle aufgerufen und wurde noch ausgeführt, als diese Funktion aufgerufen wurde.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations oder SQLSetPos wurde für " StatementHandle " aufgerufen und SQL_NEED_DATA zurückgegeben. Diese Funktion wurde aufgerufen, bevor Daten für alle Daten bei ausführungsparametern oder -spalten gesendet wurden.
HY013 Speicherverwaltungsfehler Der Funktionsaufruf konnte nicht verarbeitet werden, da auf die zugrunde liegenden Speicherobjekte nicht zugegriffen werden konnte, möglicherweise aufgrund geringer Arbeitsspeicherbedingungen.
HY090 Ungültige Zeichenfolgen- oder Pufferlänge (DM) Der Wert eines der Namenslängenargumente war kleiner als 0, aber nicht gleich SQL_NTS, und das zugehörige Name-Argument ist kein Nullzeiger.

Der Wert eines der Namenlängenargumente hat den maximal zulässigen Längenwert für den entsprechenden Namen überschritten.
HY117 Die Verbindung wird aufgrund des unbekannten Transaktionsstatus angehalten. Es sind nur Trenn- und schreibgeschützte Funktionen zulässig. (DM) Weitere Informationen zum angehaltenen Zustand finden Sie unter SQLEndTran Function.
HYC00 Optionales Feature wurde nicht implementiert Ein Katalog wurde angegeben, und der Treiber oder die Datenquelle unterstützt keine Kataloge.

Ein Schema wurde angegeben, und der Treiber oder die Datenquelle unterstützt keine Schemata.

Die Kombination der aktuellen Einstellungen der SQL_ATTR_CONCURRENCY- und SQL_ATTR_CURSOR_TYPE-Anweisungsattribute wurde vom Treiber oder der Datenquelle nicht unterstützt.

Das attribut der SQL_ATTR_USE_BOOKMARKS-Anweisung 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 überschritten Die Auszeitperiode lief ab, bevor die Datenquelle das gewünschte Ergebnisset zurückgab. Der Timeoutzeitraum wird über SQLSetStmtAttr SQL_ATTR_QUERY_TIMEOUT festgelegt.
HYT01 Verbindungstimeout abgelaufen Der Zeitraum für das Verbindungstimeout ist abgelaufen, bevor die Datenquelle auf die Anforderung geantwortet hat. Der Verbindungstimeoutzeitraum wird über SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT festgelegt.
IM001 Dieser Treiber unterstützt diese Funktion nicht. (DM) Der dem StatementHandle zugeordnete Treiber unterstützt die Funktion nicht.
IM017 Die Abrufung ist im asynchronen Benachrichtigungsmodus deaktiviert. Immer wenn das Benachrichtigungsmodell verwendet wird, ist die Abrufung 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 Nachbearbeitung durchzuführen und den Vorgang abzuschließen.

Kommentare

SQLPrimaryKeys liefert die Ergebnisse als Standardergebnismenge zurück, geordnet nach TABLE_CAT, TABLE_SCHEM, TABLE_NAME und KEY_SEQ. Informationen dazu, wie diese Informationen verwendet werden können, finden Sie unter Verwendung von Katalogdaten.

Die folgenden Spalten wurden für ODBC 3 umbenannt. x. Die Änderungen des Spaltennamens beeinflussen die Abwärtskompatibilität nicht, da Anwendungen nach Spaltennummer binden.

ODBC 2.0-Spalte ODBC 3. X-Spalte
TABLE_QUALIFIER TABLE_CAT
Tabellenbesitzer TABLE_SCHEM

Um die tatsächlichen Längen der Spalten TABLE_CAT, TABLE_SCHEM, TABLE_NAME und COLUMN_NAME zu bestimmen, rufen Sie 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 auf.

Note

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

In der folgenden Tabelle sind die Spalten im Resultset aufgeführt. Zusätzliche Spalten über Spalte 6 (PK_NAME) hinaus können vom Treiber definiert werden. Eine Anwendung sollte auf treiberspezifische Spalten zuzugreifen, indem sie vom Ende der Ergebnismenge herunterzählt, anstatt eine explizite Ordinalposition anzugeben. Weitere Informationen finden Sie unter "Von Katalogfunktionen zurückgegebene Daten".

Spaltenname Spaltennummer Datentyp Kommentare
TABLE_CAT (ODBC 1.0) 1 Varchar Name des Primärschlüssel-Tabellenkatalogs; NULL, falls es nicht auf die Datenquelle anwendbar ist. Wenn ein Treiber Kataloge für einige Tabellen, aber für andere nicht unterstützt, etwa wenn der Treiber Daten aus verschiedenen DBMSs abruft, gibt er für jene Tabellen, die keine Kataloge haben, eine leere Zeichenkette ("") zurück.
TABLE_SCHEM (ODBC 1.0) 2 Varchar Name des Primärschlüssel-Tabellenschemas; NULL, falls es nicht auf die Datenquelle anwendbar ist. Wenn ein Treiber für einige Tabellen Schemata unterstützt, aber nicht für andere, etwa wenn der Treiber Daten aus verschiedenen DBMS abruft, gibt er für jene Tabellen, die keine Schemata enthalten, eine leere Zeichenkette ("") zurück.
TABLE_NAME (ODBC 1.0) 3 Varchar nicht NULL Name der Primärschlüsseltabelle.
COLUMN_NAME (ODBC 1.0) 4 Varchar nicht NULL Primärschlüssel-Spaltenname. Der Treiber gibt eine leere Zeichenkette für eine Spalte zurück, die keinen Namen hat.
KEY_SEQ (ODBC 1.0) 5 Smallint nicht NULL Spalten-Sequenznummer in Taste (beginnend mit 1).
PK_NAME (ODBC 2.0) 6 Varchar Name des Primärschlüssels. NULL, falls es nicht auf die Datenquelle anwendbar ist.

Codebeispiel

Siehe SQLForeignKeys.

Weitere Informationen zu Siehe
Binden eines Puffers an eine Spalte in einem Resultset SQLBindCol-Funktion
Abbrechen der Verarbeitung von Anweisungen SQLCancel-Funktion
Abrufen eines Datenblocks oder Scrollen durch ein Resultset SQLFetchScroll-Funktion
Abruf einer einzelnen Zeile oder einem Datenblock in einer ausschließlich vorwärtsgerichteten Richtung SQLFetch-Funktion
Zurückgeben der Spalten von Fremdschlüsseln SQLForeignKeys-Funktion
Rückgabe von Tabellenstatistiken und Indizes SQLStatistik-Funktion