SQLPrimaryKeys-Funktion
Konformität
Version eingeführt: ODBC 1.0 Standards Compliance: ODBC
Zusammenfassung
SQLPrimaryKeys gibt die Spaltennamen zurück, die den Primärschlüssel für eine Tabelle bilden. Der Treiber gibt die Informationen als Resultset zurück. Diese Funktion unterstützt die Rückgabe von Primärschlüsseln aus mehreren Tabellen in einem einzigen Aufruf nicht.
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, z. B. wenn der Treiber Daten aus verschiedenen Datenbankdatenbanken abruft, bezeichnet eine leere Zeichenfolge ("") die Tabellen ohne Kataloge. CatalogName kann kein Zeichenfolgensuchmuster enthalten.
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] Schemaname. 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, bezeichnet eine leere Zeichenfolge ("") die Tabellen ohne Schemas. SchemaName kann kein Zeichenfolgensuchmuster enthalten.
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 gewöhnliches Argument. es wird wörtlich behandelt, und sein Fall ist nicht signifikant.
NameLength2
[Eingabe] Länge in Zeichen von *SchemaName.
TableName
[Eingabe] Tabellenname. Dieses Argument kann kein NULL-Zeiger sein. TableName kann kein Zeichenfolgensuchmuster enthalten.
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 gewöhnliches Argument. es wird wörtlich behandelt, und sein Fall ist nicht signifikant.
NameLength3
[Eingabe] Länge in Zeichen von *TableName.
Gibt zurück
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR oder SQL_INVALID_HANDLE.
Diagnose
Wenn SQLPrimaryKeys 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 häufig von SQLPrimaryKeys 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 | (DM) Ein Cursor war auf dem StatementHandle geöffnet, und SQLFetch oder SQLFetchScroll wurde aufgerufen. 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 keinen Arbeitsspeicher 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 | (DM) Das Argument TableName war ein NULL-Zeiger. Das Attribut SQL_ATTR_METADATA_ID-Anweisung wurde auf SQL_TRUE festgelegt, das CatalogName-Argument war ein NULL-Zeiger, und SQLGetInfo mit dem SQL_CATALOG_NAME Informationstyp gibt zurück, dass Katalognamen unterstützt werden. (DM) Das SQL_ATTR_METADATA_ID-Anweisungsattribut wurde auf SQL_TRUE festgelegt, und das SchemaName-Argument 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 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 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, und das zugeordnete Name-Argument ist kein NULL-Zeiger. Der Wert eines der Namenslängenargumente überschreitet den maximalen Längenwert für den entsprechenden Namen. |
HY117 | Die Verbindung wird aufgrund eines unbekannten Transaktionsstatus angehalten. Nur Trennen und schreibgeschützte Funktionen sind zulässig. | (DM) Weitere Informationen zum Angehaltenen Zustand finden Sie unter SQLEndTran-Funktion. |
HYC00 | Optionale Funktion nicht implementiert | Ein Katalog wurde angegeben, und der Treiber oder die Datenquelle unterstützt keine Kataloge. Es wurde ein Schema angegeben, und der Treiber oder die Datenquelle unterstützt keine Schemas. Die Kombination aus den aktuellen Einstellungen der SQL_ATTR_CONCURRENCY- und SQL_ATTR_CURSOR_TYPE-Anweisungsattribute wurde vom Treiber oder der Datenquelle nicht unterstützt. Das SQL_ATTR_USE_BOOKMARKS-Anweisungsattribut wurde auf SQL_UB_VARIABLE festgelegt, und das Attribut SQL_ATTR_CURSOR_TYPE-Anweisung wurde auf einen Cursortyp festgelegt, für den der Treiber keine Lesezeichen unterstützt. |
HYT00 | Timeout abgelaufen | Der Timeoutzeitraum ist abgelaufen, bevor die Datenquelle das angeforderte 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 reagiert hat. Der Zeitraum für das Verbindungstimeout wird über SQLSetConnectAttr festgelegt, SQL_ATTR_CONNECTION_TIMEOUT. |
IM001 | Der Treiber unterstützt diese Funktion nicht. | (DM) Der der StatementHandle zugeordnete Treiber unterstützt die Funktion nicht. |
IM017 | Die Abfrage ist im asynchronen Benachrichtigungsmodus deaktiviert. | Wenn das Benachrichtigungsmodell verwendet wird, ist 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
SQLPrimaryKeys gibt die Ergebnisse als Standardergebnissatz zurück, sortiert 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 wirken sich nicht auf die Abwärtskompatibilität aus, da Anwendungen an die Spaltennummer gebunden werden.
ODBC 2.0-Spalte | ODBC 3. x Spalte |
---|---|
TABLE_QUALIFIER | TABLE_CAT |
TABLE_OWNER | TABLE_SCHEM |
Um die tatsächliche Länge 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.
Hinweis
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 jenseits von Spalte 6 (PK_NAME) 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 | Spaltennummer | Datentyp | Kommentare |
---|---|---|---|
TABLE_CAT (ODBC 1.0) | 1 | Varchar | Primärschlüsseltabellenkatalogname; NULL, falls nicht für die Datenquelle zutreffend. 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 er eine leere Zeichenfolge ("") für die Tabellen ohne Kataloge zurück. |
TABLE_SCHEM (ODBC 1.0) | 2 | Varchar | Schemaname der Primärschlüsseltabelle; NULL, falls nicht für die Datenquelle zutreffend. 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 er eine leere Zeichenfolge ("") für die Tabellen ohne Schemas zurück. |
TABLE_NAME (ODBC 1.0) | 3 | Varchar nicht NULL | Primärschlüsseltabellenname. |
COLUMN_NAME (ODBC 1.0) | 4 | Varchar nicht NULL | Name der Primärschlüsselspalte. Der Treiber gibt eine leere Zeichenfolge für eine Spalte ohne Namen zurück. |
KEY_SEQ (ODBC 1.0) | 5 | Smallint nicht NULL | Spaltensequenznummer im Schlüssel (beginnend mit 1). |
PK_NAME (ODBC 2.0) | 6 | Varchar | Primärschlüsselname. NULL, falls nicht für die Datenquelle zutreffend. |
Codebeispiel
Siehe SQLForeignKeys.
Verwandte Funktionen
Informationen über | Finden Sie unter |
---|---|
Binden eines Puffers an eine Spalte in einem Resultset | SQLBindCol-Funktion |
Abbrechen der Anweisungsverarbeitung | SQLCancel-Funktion |
Abrufen eines Datenblocks oder Scrollen durch ein Resultset | SQLFetchScroll-Funktion |
Abrufen einer einzelnen Zeile oder eines Datenblocks in einer vorwärtsgerichteten Richtung | SQLFetch-Funktion |
Zurückgeben der Spalten von Fremdschlüsseln | SQLForeignKeys-Funktion |
Zurückgeben von Tabellenstatistiken und Indizes | SQLStatistics-Funktion |