Teilen über


SQLForeignKeys-Funktion

Konformität
Version eingeführt: ODBC 1.0 Standards Compliance: ODBC

Zusammenfassung
SQLForeignKeys kann Folgendes zurückgeben:

  • Eine Liste der Fremdschlüssel in der angegebenen Tabelle (Spalten in der angegebenen Tabelle, die auf Primärschlüssel in anderen Tabellen verweisen).

  • Eine Liste der Fremdschlüssel in anderen Tabellen, die auf den Primärschlüssel in der angegebenen Tabelle verweisen.

Der Treiber gibt jede Liste als Resultset für die angegebene Anweisung zurück.

Syntax

  
SQLRETURN SQLForeignKeys(  
     SQLHSTMT       StatementHandle,  
     SQLCHAR *      PKCatalogName,  
     SQLSMALLINT    NameLength1,  
     SQLCHAR *      PKSchemaName,  
     SQLSMALLINT    NameLength2,  
     SQLCHAR *      PKTableName,  
     SQLSMALLINT    NameLength3,  
     SQLCHAR *      FKCatalogName,  
     SQLSMALLINT    NameLength4,  
     SQLCHAR *      FKSchemaName,  
     SQLSMALLINT    NameLength5,  
     SQLCHAR *      FKTableName,  
     SQLSMALLINT    NameLength6);  

Argumente

StatementHandle
[Eingabe] Anweisungshandle.

PKCatalogName
[Eingabe] Name des Primärschlüsseltabellenkatalogs. 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. PKCatalogName kann kein Zeichenfolgensuchmuster enthalten.

Wenn das Attribut SQL_ATTR_METADATA_ID-Anweisung auf SQL_TRUE festgelegt ist, wird PKCatalogName als Bezeichner behandelt, und die Groß- und Kleinschreibung ist nicht signifikant. Wenn es SQL_FALSE ist, ist PKCatalogName 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 von *PKCatalogName in Zeichen.

PKSchemaName
[Eingabe] Schemaname der Primärschlüsseltabelle. 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. PKSchemaName kann kein Zeichenfolgensuchmuster enthalten.

Wenn das Attribut SQL_ATTR_METADATA_ID-Anweisung auf SQL_TRUE festgelegt ist, wird PKSchemaName als Bezeichner behandelt, und die Groß- und Kleinschreibung ist nicht signifikant. Wenn es SQL_FALSE ist, ist PKSchemaName ein gewöhnliches Argument. es wird wörtlich behandelt, und sein Fall ist von Bedeutung.

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

PKTableName
[Eingabe] Primärschlüsseltabellenname. PKTableName kann kein Zeichenfolgensuchmuster enthalten.

Wenn das Attribut SQL_ATTR_METADATA_ID-Anweisung auf SQL_TRUE festgelegt ist, wird PKTableName als Bezeichner behandelt, und die Groß- und Kleinschreibung ist nicht signifikant. Wenn es SQL_FALSE ist, ist PKTableName ein gewöhnliches Argument. es wird wörtlich behandelt, und sein Fall ist von Bedeutung.

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

FKCatalogName
[Eingabe] Name des Fremdschlüsseltabellenkatalogs. 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. FKCatalogName kann kein Zeichenfolgensuchmuster enthalten.

Wenn das Attribut der SQL_ATTR_METADATA_ID-Anweisung auf SQL_TRUE festgelegt ist, wird FKCatalogName als Bezeichner behandelt, und die Groß- und Kleinschreibung ist nicht signifikant. Wenn es SQL_FALSE ist, ist FKCatalogName ein gewöhnliches Argument. es wird wörtlich behandelt, und sein Fall ist von Bedeutung.

NameLength4
[Eingabe] Länge von *FKCatalogName in Zeichen.

FKSchemaName
[Eingabe] Name des Fremdschlüsseltabellenschemas. 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. FKSchemaName kann kein Zeichenfolgensuchmuster enthalten.

Wenn das SQL_ATTR_METADATA_ID-Anweisungsattribut auf SQL_TRUE festgelegt ist, wird FKSchemaName als Bezeichner behandelt, und die Groß- und Kleinschreibung ist nicht signifikant. Wenn es SQL_FALSE ist, ist FKSchemaName ein gewöhnliches Argument. es wird wörtlich behandelt, und sein Fall ist von Bedeutung.

NameLength5
[Eingabe] Länge von *FKSchemaName in Zeichen.

FKTableName
[Eingabe] Name der Fremdschlüsseltabelle. FKTableName kann kein Zeichenfolgensuchmuster enthalten.

Wenn das Attribut SQL_ATTR_METADATA_ID-Anweisung auf SQL_TRUE festgelegt ist, wird FKTableName als Bezeichner behandelt, und die Groß- und Kleinschreibung ist nicht signifikant. Wenn es SQL_FALSE ist, ist FKTableName ein gewöhnliches Argument. es wird wörtlich behandelt, und sein Fall ist von Bedeutung.

NameLength6
[Eingabe] Länge von *FKTableName in Zeichen.

Gibt zurück

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR oder SQL_INVALID_HANDLE.

Diagnose

Wenn SQLForeignKeys 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 in der Regel von SQLForeignKeys 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 Im StatementHandle war ein Cursor geöffnet, und SQLFetch oder SQLFetchScroll wurde aufgerufen. Dieser Fehler wird vom Treiber-Manager zurückgegeben, wenn SQLFetch oder SQLFetchScroll nicht SQL_NO_DATA zurückgegeben hat, und wird vom Treiber zurückgegeben, wenn SQLFetch oder SQLFetchScroll SQL_NO_DATA zurückgegeben hat.

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 arbeitsspeicher nicht 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 sie die Ausführung abgeschlossen hat, wurde SQLCancel oder SQLCancelHandle für das StatementHandle aufgerufen, und dann wurde die Funktion für die StatementHandle erneut 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 des NULL-Zeigers (DM) Die Argumente PKTableName und FKTableName waren beide NULL-Zeiger.

Das SQL_ATTR_METADATA_ID-Anweisungsattribut wurde auf SQL_TRUE festgelegt, das Argument FKCatalogName oder PKCatalogName war ein NULL-Zeiger, und die SQL_CATALOG_NAME InfoType gibt zurück, dass Katalognamen unterstützt werden.

(DM) Das SQL_ATTR_METADATA_ID-Anweisungsattribut wurde auf SQL_TRUE festgelegt, und das Argument FKSchemaName, PKSchemaName, FKTableName oder PKTableName 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 FUNKTION SQLForeignKeys 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 der Ausführungsparameter oder -spalten gesendet wurden.
HY013 Fehler bei der Speicherverwaltung Der Funktionsaufruf konnte nicht verarbeitet werden, weil auf die zugrunde liegenden Speicherobjekte nicht zugegriffen werden konnte, möglicherweise aufgrund von geringen Arbeitsspeicherbedingungen.
HY090 Ungültige Zeichenfolgen- oder Pufferlänge (DM) Der Wert eines der Namenslängenargumente war kleiner als 0, aber nicht gleich SQL_NTS.
Der Wert eines der Namenslängenargumente hat den maximalen Längenwert für den entsprechenden Namen überschritten. (Siehe "Kommentare".)
HY117 Die Verbindung wird aufgrund eines unbekannten Transaktionsstatus angehalten. Nur trenn- und schreibgeschützte Funktionen sind zulässig. (DM) Weitere Informationen zum angehaltenen Zustand finden Sie unter SQLEndTran-Funktion.
HYC00 Optionales Feature nicht implementiert Es wurde ein Katalogname angegeben, und der Treiber oder die Datenquelle unterstützt keine Kataloge.

Es wurde ein Schemaname angegeben, und der Treiber oder die Datenquelle unterstützt keine Schemas.
Die Kombination aus den aktuellen Einstellungen des SQL_ATTR_CONCURRENCY- und SQL_ATTR_CURSOR_TYPE-Anweisungsattributes wurde vom Treiber oder der Datenquelle nicht unterstützt.

Das SQL_ATTR_USE_BOOKMARKS-Anweisungsattribut 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 abgelaufen Der Abfragetimeoutzeitraum ist abgelaufen, bevor die Datenquelle das 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 geantwortet hat. Der Verbindungstimeoutzeitraum wird über SQLSetConnectAttr festgelegt, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Treiber unterstützt diese Funktion nicht. (DM) Der Der StatementHandle zugeordnete Treiber unterstützt die Funktion nicht.
IM017 Abruf ist im asynchronen Benachrichtigungsmodus deaktiviert. Wenn das Benachrichtigungsmodell verwendet wird, wird 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

Informationen dazu, wie die von dieser Funktion zurückgegebenen Informationen verwendet werden können, finden Sie unter Verwendung von Katalogdaten.

Wenn *PKTableName einen Tabellennamen enthält, gibt SQLForeignKeys ein Resultset zurück, das den Primärschlüssel der angegebenen Tabelle und alle Fremdschlüssel enthält, die darauf verweisen. Die Liste der Fremdschlüssel in anderen Tabellen enthält keine Fremdschlüssel, die auf eindeutige Einschränkungen in der angegebenen Tabelle verweisen.

Wenn *FKTableName einen Tabellennamen enthält, gibt SQLForeignKeys ein Resultset zurück, das alle Fremdschlüssel in der angegebenen Tabelle enthält, die auf Primärschlüssel in anderen Tabellen verweisen, und die Primärschlüssel in den anderen Tabellen, auf die sie verweisen. Die Liste der Fremdschlüssel in der angegebenen Tabelle enthält keine Fremdschlüssel, die auf eindeutige Einschränkungen in anderen Tabellen verweisen.

Wenn sowohl *PKTableName als auch *FKTableName Tabellennamen enthalten, gibt SQLForeignKeys die Fremdschlüssel in der in *FKTableName angegebenen Tabelle zurück, die auf den Primärschlüssel der in *PKTableName angegebenen Tabelle verweisen. Dies sollte höchstens ein Schlüssel sein.

Hinweis

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

SQLForeignKeys gibt Ergebnisse als Standardergebnissatz zurück. Wenn die einem Primärschlüssel zugeordneten Fremdschlüssel angefordert werden, wird das Resultset nach FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME und KEY_SEQ sortiert. Wenn die einem Fremdschlüssel zugeordneten Primärschlüssel angefordert werden, wird das Resultset nach PKTABLE_CAT, PKTABLE_SCHEM, PKTABLE_NAME und KEY_SEQ sortiert. In der folgenden Tabelle sind die Spalten im Resultset aufgeführt.

Die Längen der VARCHAR-Spalten werden in der Tabelle nicht angezeigt. die tatsächliche Länge hängt von der Datenquelle ab. Um die tatsächliche Länge der PKTABLE_CAT oder FKTABLE_CAT, PKTABLE_SCHEM oder FKTABLE_SCHEM, PKTABLE_NAME oder FKTABLE_NAME und PKCOLUMN_NAME oder FKCOLUMN_NAME Spalten zu bestimmen, kann eine Anwendung 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 aufrufen.

Die folgenden Spalten wurden für ODBC 3*.x umbenannt.* Die Spaltennamenänderungen wirken sich nicht auf die Abwärtskompatibilität aus, da Anwendungen anhand der Spaltennummer gebunden werden.

ODBC 2.0-Spalte ODBC 3*.x*-Spalte
PKTABLE_QUALIFIER PKTABLE_CAT
PKTABLE_OWNER PKTABLE_SCHEM
FKTABLE_QUALIFIER FK_TABLE_CAT
FKTABLE_OWNER FKTABLE_SCHEM

In der folgenden Tabelle sind die Spalten im Resultset aufgeführt. Zusätzliche Spalten über Spalte 14 (HINWEISE) hinaus 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
PKTABLE_CAT (ODBC 1.0) 1 Varchar Name des Primärschlüsseltabellenkatalogs; NULL, wenn nicht auf die Datenquelle anwendbar. Wenn ein Treiber Kataloge für einige Tabellen, aber nicht für andere unterstützt, z. B. wenn der Treiber Daten aus verschiedenen DBMS abruft, gibt er eine leere Zeichenfolge ("") für die Tabellen zurück, die keine Kataloge enthalten.
PKTABLE_SCHEM (ODBC 1.0) 2 Varchar Name des Primärschlüsseltabellenschemas; NULL, wenn nicht auf die Datenquelle anwendbar. Wenn ein Treiber Schemas für einige Tabellen unterstützt, aber nicht für andere, z. B. wenn der Treiber Daten aus verschiedenen DBMS abruft, gibt er eine leere Zeichenfolge ("") für die Tabellen zurück, die keine Schemas haben.
PKTABLE_NAME (ODBC 1.0) 3 Varchar nicht NULL Name der Primärschlüsseltabelle.
PKCOLUMN_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.
FKTABLE_CAT (ODBC 1.0) 5 Varchar Name des Fremdschlüsseltabellenkatalogs; NULL, wenn nicht auf die Datenquelle anwendbar. Wenn ein Treiber Kataloge für einige Tabellen, aber nicht für andere unterstützt, z. B. wenn der Treiber Daten aus verschiedenen DBMS abruft, gibt er eine leere Zeichenfolge ("") für die Tabellen zurück, die keine Kataloge enthalten.
FKTABLE_SCHEM (ODBC 1.0) 6 Varchar Name des Fremdschlüsseltabellenschemas; NULL, wenn nicht auf die Datenquelle anwendbar. Wenn ein Treiber Schemas für einige Tabellen unterstützt, aber nicht für andere, z. B. wenn der Treiber Daten aus verschiedenen DBMS abruft, gibt er eine leere Zeichenfolge ("") für die Tabellen zurück, die keine Schemas haben.
FKTABLE_NAME (ODBC 1.0) 7 Varchar nicht NULL Name der Fremdschlüsseltabelle.
FKCOLUMN_NAME (ODBC 1.0) 8 Varchar nicht NULL Name der Fremdschlüsselspalte. Der Treiber gibt eine leere Zeichenfolge für eine Spalte ohne Namen zurück.
KEY_SEQ (ODBC 1.0) 9 Smallint nicht NULL Spaltensequenznummer in Schlüssel (beginnend mit 1).
UPDATE_RULE (ODBC 1.0) 10 Smallint Aktion, die auf den Fremdschlüssel angewendet werden soll, wenn der SQL-Vorgang UPDATE lautet. Kann einen der folgenden Werte haben. (Die Tabelle, auf die verwiesen wird, ist die Tabelle mit dem Primärschlüssel. Die verweisende Tabelle ist die Tabelle mit dem Fremdschlüssel.)

SQL_CASCADE: Wenn der Primärschlüssel der Tabelle aktualisiert wird, auf die verwiesen wird, wird auch der Fremdschlüssel der verweisenden Tabelle aktualisiert.

SQL_NO_ACTION: Wenn eine Aktualisierung des Primärschlüssels der Tabelle, auf die verwiesen wird, einen "hängenden Verweis" in der verweisenden Tabelle verursachen würde (d. h., Zeilen in der verweisenden Tabelle hätten keine Entsprechungen in der Tabelle, auf die verwiesen wird), wird das Update abgelehnt. Wenn bei einer Aktualisierung des Fremdschlüssels der verweisenden Tabelle ein Wert eingeführt würde, der nicht als Wert des Primärschlüssels der Tabelle vorhanden ist, auf die verwiesen wird, wird die Aktualisierung abgelehnt. (Diese Aktion ist identisch mit der aktion SQL_RESTRICT in ODBC 2*.x*.)

SQL_SET_NULL: Wenn eine oder mehrere Zeilen in der Tabelle, auf die verwiesen wird, so aktualisiert werden, dass eine oder mehrere Komponenten des Primärschlüssels geändert werden, werden die Komponenten des Fremdschlüssels in der verweisenden Tabelle, die den geänderten Komponenten des Primärschlüssels entsprechen, in allen übereinstimmenden Zeilen der verweisenden Tabelle auf NULL festgelegt.

SQL_SET_DEFAULT: Wenn eine oder mehrere Zeilen in der Tabelle, auf die verwiesen wird, so aktualisiert werden, dass eine oder mehrere Komponenten des Primärschlüssels geändert werden, werden die Komponenten des Fremdschlüssels in der verweisenden Tabelle, die den geänderten Komponenten des Primärschlüssels entsprechen, auf die anwendbaren Standardwerte in allen übereinstimmenden Zeilen der verweisenden Tabelle festgelegt.

NULL, wenn nicht auf die Datenquelle anwendbar.
DELETE_RULE (ODBC 1.0) 11 Smallint Aktion, die auf den Fremdschlüssel angewendet werden soll, wenn der SQL-Vorgang DELETE ist. Kann einen der folgenden Werte haben. (Die Tabelle, auf die verwiesen wird, ist die Tabelle mit dem Primärschlüssel. Die verweisende Tabelle ist die Tabelle mit dem Fremdschlüssel.)

SQL_CASCADE: Wenn eine Zeile in der Tabelle gelöscht wird, auf die verwiesen wird, werden auch alle übereinstimmenden Zeilen in den verweisenden Tabellen gelöscht.

SQL_NO_ACTION: Wenn ein Löschen einer Zeile in der Tabelle, auf die verwiesen wird, einen "hängenden Verweis" in der verweisenden Tabelle verursachen würde (d. h., Zeilen in der verweisenden Tabelle hätten keine Entsprechungen in der Referenztabelle), wird die Aktualisierung abgelehnt. (Diese Aktion ist identisch mit der aktion SQL_RESTRICT in ODBC 2*.x*.)

SQL_SET_NULL: Wenn eine oder mehrere Zeilen in der Tabelle gelöscht werden, auf die verwiesen wird, wird jede Komponente des Fremdschlüssels der verweisenden Tabelle in allen übereinstimmenden Zeilen der verweisenden Tabelle auf NULL festgelegt.

SQL_SET_DEFAULT: Wenn eine oder mehrere Zeilen in der Tabelle gelöscht werden, auf die verwiesen wird, wird jede Komponente des Fremdschlüssels der verweisenden Tabelle in allen übereinstimmenden Zeilen der verweisenden Tabelle auf den entsprechenden Standardwert festgelegt.

NULL, wenn nicht auf die Datenquelle anwendbar.
FK_NAME (ODBC 2.0) 12 Varchar Fremdschlüsselname. NULL, wenn nicht auf die Datenquelle anwendbar.
PK_NAME (ODBC 2.0) 13 Varchar Primärschlüsselname. NULL, wenn nicht auf die Datenquelle anwendbar.
DEFERRABILITY (ODBC 3.0) 14 Smallint SQL_INITIALLY_DEFERRED, SQL_INITIALLY_IMMEDIATE, SQL_NOT_DEFERRABLE.

Codebeispiel

Wie in der folgenden Tabelle dargestellt, werden in diesem Beispiel drei Tabellen mit den Namen ORDERS, LINES und CUSTOMERS verwendet.

ORDERS LINES KUNDEN
ORDERID ORDERID CUSTID
CUSTID LINES NAME
OPENDATE PARTID ADRESSE
VERKÄUFER MENGE TELEFON
STATUS

In der Tabelle ORDERS identifiziert CUSTID den Kunden, an den der Verkauf erfolgt ist. Es handelt sich um einen Fremdschlüssel, der auf CUSTID in der CUSTOMERS-Tabelle verweist.

In der TABELLE LINES identifiziert ORDERID den Verkaufsauftrag, dem die Position zugeordnet ist. Es handelt sich um einen Fremdschlüssel, der auf ORDERID in der TABELLE ORDERS verweist.

In diesem Beispiel wird SQLPrimaryKeys aufgerufen, um den Primärschlüssel der TABELLE ORDERS abzurufen. Das Resultset enthält eine Zeile; Die signifikanten Spalten werden in der folgenden Tabelle angezeigt.

table_name COLUMN_NAME KEY_SEQ
ORDERS ORDERID 1

Als Nächstes ruft das Beispiel SQLForeignKeys auf, um die Fremdschlüssel in anderen Tabellen abzurufen, die auf den Primärschlüssel der TABELLE ORDERS verweisen. Das Resultset enthält eine Zeile; Die signifikanten Spalten werden in der folgenden Tabelle angezeigt.

PKTABLE_NAME PKCOLUMN_NAME FKTABLE_NAME FKCOLUMN_NAME KEY_SEQ
ORDERS CUSTID LINES CUSTID 1

Schließlich ruft das Beispiel SQLForeignKeys auf, um die Fremdschlüssel in der TABELLE ORDERS abzurufen, die auf die Primärschlüssel anderer Tabellen verweisen. Das Resultset weist eine Zeile auf. die wesentlichen Spalten werden in der folgenden Tabelle dargestellt.

PKTABLE_NAME PKCOLUMN_NAME FKTABLE_NAME FKCOLUMN_NAME KEY_SEQ
KUNDEN CUSTID ORDERS CUSTID 1
#define TAB_LEN SQL_MAX_TABLE_NAME_LEN + 1  
#define COL_LEN SQL_MAX_COLUMN_NAME_LEN + 1  
  
LPSTR   szTable;              /* Table to display */  
  
UCHAR szPkTable[TAB_LEN];   /* Primary key table name */  
UCHAR szFkTable[TAB_LEN];   /* Foreign key table name */  
UCHAR szPkCol[COL_LEN];     /* Primary key column */  
UCHAR szFkCol[COL_LEN];     /* Foreign key column */  
  
SQLHSTMT      hstmt;  
SQLINTEGER    cbPkTable, cbPkCol, cbFkTable, cbFkCol, cbKeySeq;  
SQLSMALLINT   iKeySeq;  
SQLRETURN     retcode;  
  
// Bind the columns that describe the primary and foreign keys.  
// Ignore the table schema, name, and catalog for this example.  
  
SQLBindCol(hstmt, 3, SQL_C_CHAR, szPkTable, TAB_LEN, &cbPkTable);  
SQLBindCol(hstmt, 4, SQL_C_CHAR, szPkCol, COL_LEN, &cbPkCol);  
SQLBindCol(hstmt, 5, SQL_C_SSHORT, &iKeySeq, TAB_LEN, &cbKeySeq);  
SQLBindCol(hstmt, 7, SQL_C_CHAR, szFkTable, TAB_LEN, &cbFkTable);  
SQLBindCol(hstmt, 8, SQL_C_CHAR, szFkCol, COL_LEN, &cbFkCol);  
  
strcpy_s(szTable, sizeof(szTable), "ORDERS");  
  
/* Get the names of the columns in the primary key. */  
  
retcode = SQLPrimaryKeys(hstmt,  
         NULL, 0,             /* Catalog name */  
         NULL, 0,             /* Schema name */  
         szTable, SQL_NTS);   /* Table name */  
  
while ((retcode == SQL_SUCCESS) || (retcode == SQL SUCCESS_WITH_INFO)) {  
  
   /* Fetch and display the result set. This will be a list of the */  
   /* columns in the primary key of the ORDERS table. */  
  
   retcode = SQLFetch(hstmt);  
   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)  
      fprintf(out, "Table: %s Column: %s Key Seq: %hd \n", szPkTable, szPkCol,  
      iKeySeq);  
}  
  
/* Close the cursor (the hstmt is still allocated). */  
  
SQLFreeStmt(hstmt, SQL_CLOSE);  
  
/* Get all the foreign keys that refer to ORDERS primary key.*/   
  
retcode = SQLForeignKeys(hstmt,  
         NULL, 0,            /* Primary catalog */  
         NULL, 0,            /* Primary schema */  
         szTable, SQL_NTS,   /* Primary table */  
         NULL, 0,            /* Foreign catalog */  
         NULL, 0,            /* Foreign schema */  
         NULL, 0);           /* Foreign table */  
  
while ((retcode == SQL_SUCCESS) || (retcode == SQL_SUCCESS_WITH_INFO)) {  
  
/* Fetch and display the result set. This will be all of the */  
/* foreign keys in other tables that refer to the ORDERS */  
/* primary key. */  
  
   retcode = SQLFetch(hstmt);  
   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)  
      fprintf(out, "%-s ( %-s ) <-- %-s ( %-s )\n", szPkTable,  
               szPkCol, szFkTable, szFkCol);  
}  
  
/* Close the cursor (the hstmt is still allocated). */  
  
SQLFreeStmt(hstmt, SQL_CLOSE);  
  
/* Get all the foreign keys in the ORDERS table. */  
  
retcode = SQLForeignKeys(hstmt,  
         NULL, 0,             /* Primary catalog */  
         NULL, 0,             /* Primary schema */  
         NULL, 0,             /* Primary table */  
         NULL, 0,             /* Foreign catalog */  
         NULL, 0,             /* Foreign schema */  
         szTable, SQL_NTS);   /* Foreign table */  
  
while ((retcode == SQL_SUCCESS) || (retcode == SQL_SUCCESS_WITH_INFO)) {  
  
/* Fetch and display the result set. This will be all of the */  
/* primary keys in other tables that are referred to by foreign */  
/* keys in the ORDERS table. */  
  
   retcode = SQLFetch(hstmt);  
   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)  
      fprintf(out, "%-s ( %-s )--> %-s ( %-s )\n", szFkTable, szFkCol, szPkTable, szPkCol);  
}  
  
/* Free the hstmt. */  
SQLFreeStmt(hstmt, SQL_DROP);  
Informationen über Finden Sie unter
Binden eines Puffers an eine Spalte in einem Resultset SQLBindCol-Funktion
Abbrechen der Anweisungsverarbeitung SQLCancel-Funktion
Abrufen einer einzelnen Zeile oder eines Datenblocks in einer vorwärtsgerichteten Richtung SQLFetch-Funktion
Abrufen eines Datenblocks oder Scrollen durch ein Resultset SQLFetchScroll-Funktion
Zurückgeben der Spalten eines Primärschlüssels SQLPrimaryKeys-Funktion
Zurückgeben von Tabellenstatistiken und Indizes SQLStatistics-Funktion

Weitere Informationen

ODBC-API-Referenz
ODBC-Headerdateien