Funkce SQLForeignKeys

Soulad
Zavedená verze: ODBC 1.0 Soulad standardů: ODBC

Shrnutí
SQLForeignKeys může vrátit:

  • Seznam cizích klíčů ve specifikované tabulce (sloupce v dané tabulce, které odkazují na primární klíče v jiných tabulkách).

  • Seznam cizích klíčů v jiných tabulkách, které odkazují na primární klíč ve specifikované tabulce.

Ovladač vrací každý seznam jako výslednou sadu na zadaném příkazu.

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);  

Arguments

StatementHandle
[Vstup] Popisovač příkazu

PKCatalogName
[Vstup] Primární klíčová tabulka katalogu název. Pokud ovladač podporuje katalogy pro některé tabulky, ale ne pro jiné, například když ovladač získává data z různých DBMS, prázdný řetězec ("") označuje tabulky, které katalogy nemají. PKCatalogName nemůže obsahovat vzor vyhledávání řetězců.

Pokud je atribut SQL_ATTR_METADATA_ID příkazu nastaven na SQL_TRUE, PKCatalogName je považován za identifikátor a jeho případ není významný. Pokud je to SQL_FALSE, PKCatalogName je běžný argument; Je brána doslovně a její případ je významný. Další informace naleznete v tématu Argumenty funkce katalogu.

NameLength1
[Vstup] Délka *PKCatalogName, v znacích.

PKSchemaName
[Vstup] Název schématu primární klíčové tabulky. Pokud ovladač podporuje schémata pro některé tabulky, ale ne pro jiné, například když ovladač získává data z různých DBMS, prázdný řetězec ("") označuje tabulky, které schémata nemají. PKSchemaName nemůže obsahovat vzor vyhledávání řetězců.

Pokud je atribut SQL_ATTR_METADATA_ID příkazu nastaven na SQL_TRUE, PKSchemaName je považován za identifikátor a jeho případ není významný. Pokud je to SQL_FALSE, PKSchemaName je běžný argument; Je brána doslovně a její případ je významný.

NameLength2
[Vstup] Délka *PKSchemaName, v znacích.

PKTableName
[Vstup] Název hlavní klíčové tabulky. PKTableName nemůže obsahovat vzor vyhledávání řetězců.

Pokud je atribut SQL_ATTR_METADATA_ID příkazu nastaven na SQL_TRUE, PKTableName je považován za identifikátor a jeho případ není významný. Pokud je to SQL_FALSE, PKTableName je běžný argument; Je brána doslovně a její případ je významný.

NameLength3
[Vstup] Délka *PKTableName, v znacích.

FKCatalogName
[Vstup] Název katalogu tabulky cizích klíčů. Pokud ovladač podporuje katalogy pro některé tabulky, ale ne pro jiné, například když ovladač získává data z různých DBMS, prázdný řetězec ("") označuje tabulky, které katalogy nemají. FKCatalogName nemůže obsahovat vzor vyhledávání řetězců.

Pokud je atribut SQL_ATTR_METADATA_ID příkazu nastaven na SQL_TRUE, FKCatalogName je považován za identifikátor a jeho případ není významný. Pokud je to SQL_FALSE, FKCatalogName je běžný argument; Je brána doslovně a její případ je významný.

NameLength4
[Vstup] Délka *FKCatalogName, v znacích.

FKSchemaName
[Vstup] Název schématu cizí klíčové tabulky. Pokud ovladač podporuje schémata pro některé tabulky, ale ne pro jiné, například když ovladač získává data z různých DBMS, prázdný řetězec ("") označuje tabulky, které schémata nemají. FKSchemaName nemůže obsahovat vzor vyhledávání řetězců.

Pokud je atribut SQL_ATTR_METADATA_ID příkazu nastaven na SQL_TRUE, FKSchemaName je považován za identifikátor a jeho případ není významný. Pokud je to SQL_FALSE, FKSchemaName je běžný argument; Je brána doslovně a její případ je významný.

NázevDélka5
[Vstup] Délka *FKSchemaName, v znacích.

FKTableName
[Vstup] Název tabulky cizích klíčů. FKTableName nemůže obsahovat vzor vyhledávání řetězců.

Pokud je atribut SQL_ATTR_METADATA_ID příkazu nastaven na SQL_TRUE, FKTableName je považován za identifikátor a jeho případ není významný. Pokud je to SQL_FALSE, FKTableName je běžný argument; Je brána doslovně a její případ je významný.

NájmenDélka6
[Vstup] Délka *FKTableName, v znacích.

Returns

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR nebo SQL_INVALID_HANDLE.

Diagnostics

Když SQLForeignKeys vrátí SQL_ERROR nebo SQL_SUCCESS_WITH_INFO, lze získat přidruženou hodnotu SQLstate, pokud zavoláte SQLGetDiagRec s HandleType SQL_HANDLE_STMT a HandleStatementHandle. Následující tabulka uvádí hodnoty SQLSTATE, které SQLForeignKeys obvykle vrací, a vysvětluje každou z nich v kontextu této funkce; notace "(DM)" předchází popisům SQLstavů vráceným Správcem ovladačů. Návratový kód přidružený ke každé hodnotě SQLSTATE je SQL_ERROR, pokud není uvedeno jinak.

SQLSTATE Error Description
01000 Obecné upozornění Informační zpráva specifická pro řidiče (Funkce vrátí SQL_SUCCESS_WITH_INFO.)
08S01 Selhání komunikačního propojení Komunikační propojení mezi ovladačem a zdrojem dat, ke kterému byl ovladač připojen, selhalo před dokončením zpracování funkce.
24000 Neplatný stav kurzoru Na StatementHandle byl otevřený kurzor a byly volány SQLFetch nebo SQLFetchScroll . Tato chyba je vrácena Správcem ovladačů, pokud SQLFetch nebo SQLFetchScroll nevrátil SQL_NO_DATA a ovladač je vrácen, pokud SQLFetch nebo SQLFetchScroll vrátil SQL_NO_DATA.

Na StatementHandle byl otevřený kurzor, ale SQLFetch nebo SQLFetchScroll nebyly volány.
40001 Selhání serializace Transakce byla vrácena zpět kvůli vzájemnému zablokování prostředku s jinou transakcí.
40003 Neznámé dokončování příkazů Přidružené připojení se nezdařilo během provádění této funkce a stav transakce nelze určit.
HY000 Obecná chyba Došlo k chybě, pro kterou nebyla definována žádná specifická funkce SQLSTATE a pro kterou nebyla definována žádná implementace sqlSTATE. Chybová zpráva vrácená nástrojem SQLGetDiagRec v vyrovnávací paměti *MessageText popisuje chybu a její příčinu.
HY001 Chyba přidělení paměti Ovladač nemohl přidělit paměť, která je nutná k podpoře provádění nebo dokončování funkce.
HY008 Operace byla zrušena. Asynchronní zpracování bylo povoleno pro StatementHandle. Funkce byla vyvolána a před dokončením vykonávání byl na StatementHandlezavolán SQLCancel nebo SQLCancelHandle a poté byla funkce znovu volána na StatementHandle.

Funkce byla volána a před dokončením provádění byla volána funkce SQLCancel neboSQLCancelHandlez jiného vlákna v aplikaci s více vlákny.
HY009 Neplatné použití ukazatele null (DM) Argumenty PKTableName a FKTableName byly oba nulové ukazatele.

Atribut SQL_ATTR_METADATA_ID příkazu byl nastaven na SQL_TRUE, argument FKCatalogName nebo PKCatalogName byl nulový ukazatel a SQL_CATALOG_NAME InfoType vrací, že jsou podporována katalogová jména.

(DM) Atribut SQL_ATTR_METADATA_ID příkazu byl nastaven na SQL_TRUE a argument FKSchemaName, PKSchemaName, FKTableName nebo PKTableName byl nulovým ukazatelem.
HY010 Chyba posloupnosti funkcí (DM) Byla volána asynchronně spuštěná funkce pro popisovač připojení, který je přidružen k StatementHandle. Tato asynchronní funkce se stále spouštěla, když byla volána funkce SQLForeignKeys.

(DM) SQLExecute, SQLExecDirect nebo SQLMoreResults byl volána pro StatementHandle a vrácena SQL_PARAM_DATA_AVAILABLE. Tato funkce byla volána před načtením dat pro všechny streamované parametry.

(DM) Pro PříkazHandle byla volána asynchronně spuštěná funkce (ne tato) a při zavolání této funkce se stále spouštěla.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations nebo SQLSetPos byly volány pro StatementHandle a vráceny SQL_NEED_DATA. Tato funkce byla volána před odesláním dat pro všechny parametry provádění dat nebo sloupce.
HY013 Chyba správy paměti Volání funkce nelze zpracovat, protože základní objekty paměti nelze získat přístup, pravděpodobně kvůli nedostatku paměti.
HY090 Neplatná délka řetězce nebo vyrovnávací paměti (DM) Hodnota jednoho z argumentů délky názvu byla menší než 0, ale nebyla rovna SQL_NTS.
Hodnota jednoho z argumentů délky názvu překročila maximální hodnotu délky odpovídajícího názvu. (Viz "Komentáře.")
HY117 Připojení je pozastaveno kvůli neznámému stavu transakce. Jsou povoleny pouze funkce pro odpojení a jen pro čtení. (DM) Další informace o pozastaveném stavu naleznete v tématu FUNKCE SQLEndTran.
HYC00 Nepovinná funkce není implementována. Byl zadán název katalogu a ovladač nebo zdroj dat katalogy nepodporuje.

Byl specifikován název schématu a ovladač nebo zdroj dat schémata nepodporuje.
Ovladač ani zdroj dat nepodporuje kombinaci aktuálních nastavení atributů SQL_ATTR_CONCURRENCY a SQL_ATTR_CURSOR_TYPE příkazu.

Atribut příkazu SQL_ATTR_USE_BOOKMARKS byl nastaven na SQL_UB_VARIABLE a atribut příkazu SQL_ATTR_CURSOR_TYPE byl nastaven na typ kurzoru, pro který ovladač nepodporuje záložky.
HYT00 Vypršel časový limit. Platnost časového limitu dotazu vypršela, než zdroj dat vrátil sadu výsledků. Časový limit je nastavený prostřednictvím sqlSetStmtAttr SQL_ATTR_QUERY_TIMEOUT.
HYT01 Vypršel časový limit připojení Platnost časového limitu připojení vypršela, než zdroj dat odpověděl na žádost. Časový limit připojení je nastavený prostřednictvím sqlSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Ovladač tuto funkci nepodporuje. (DM) Ovladač přidružený k StatementHandle nepodporuje funkci.
IM017 Dotazování je zakázané v asynchronním režimu oznámení. Při každém použití modelu oznámení je dotazování zakázané.
IM018 K dokončení předchozí asynchronní operace na tomto popisovači nebyla volána funkce SQLCompleteAsync. Pokud předchozí volání funkce na popisovači vrátí SQL_STILL_EXECUTING a pokud je povolen režim oznámení, musí být sqlCompleteAsync volán na popisovači, aby bylo možné provést následné zpracování a dokončit operaci.

Comments

Pro informace o tom, jak lze informace vrácené touto funkcí použít, viz Využití katalogových dat.

Pokud *PKTableName obsahuje název tabulky, SQLForeignKeys vrátí výslednou sadu, která obsahuje primární klíč dané tabulky a všechny cizí klíče, které se na ni vztahují. Seznam cizích klíčů v jiných tabulkách nezahrnuje cizí klíče, které ukazují na jedinečná omezení v dané tabulce.

Pokud *FKTableName obsahuje název tabulky, SQLForeignKeys vrátí výslednou sadu, která obsahuje všechny cizí klíče ve specifikované tabulce, které ukazují na primární klíče v jiných tabulkách, a primární klíče v ostatních tabulkách, na které se vztahují. Seznam cizích klíčů v uvedené tabulce neobsahuje cizí klíče, které odkazují na jedinečná omezení v jiných tabulkách.

Pokud oba typy *PKTableName a *FKTableName obsahují názvy tabulek, SQLForeignKeys vrátí cizí klíče v tabulce specifikované v *FKTableName , které odkazují na primární klíč tabulky specifikované v *PKTableName. To by měl být maximálně jeden klíč.

Note

Další informace o obecném použití, argumentech a vrácených datech funkcí katalogu ODBC naleznete v tématu Funkce katalogu.

SQLForeignKeys vrací výsledky jako standardní sadu výsledků. Pokud jsou požádány cizí klíče spojené s primárním klíčem, výsledná sada je uspořádána podle FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME a KEY_SEQ. Pokud jsou požádány primární klíče spojené s cizím klíčem, výsledná sada je uspořádána podle PKTABLE_CAT, PKTABLE_SCHEM, PKTABLE_NAME a KEY_SEQ. Následující tabulka uvádí sloupce v sadě výsledků.

Délky sloupců VARCHAR nejsou v tabulce uvedeny; skutečné délky závisí na zdroji dat. Pro určení skutečných délek PKTABLE_CAT nebo FKTABLE_CAT, PKTABLE_SCHEM nebo FKTABLE_SCHEM, PKTABLE_NAME nebo FKTABLE_NAME a sloupců PKCOLUMN_NAME nebo FKCOLUMN_NAME může aplikace volat SQLGetInfo s možnostmi SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN a SQL_MAX_COLUMN_NAME_LEN.

Následující sloupce byly přejmenovány pro ODBC 3*.x.* Změny názvů sloupců neovlivňují zpětnou kompatibilitu, protože aplikace se vázají podle čísla sloupce.

Sloupec ODBC 2.0 ODBC 3*.x* sloupec
PKTABLE_QUALIFIER PKTABLE_CAT
PKTABLE_OWNER PKTABLE_SCHEM
FKTABLE_QUALIFIER FK_TABLE_CAT
FKTABLE_OWNER FKTABLE_SCHEM

Následující tabulka uvádí sloupce v sadě výsledků. Další sloupce za sloupcem 14 (POZNÁMKY) může řidič definovat. Aplikace by měla získat přístup ke sloupcům specifickým pro ovladače tím, že odpočítává od konce sady výsledků místo určení explicitní řadové pozice. Další informace naleznete v tématu Data vrácená funkcemi katalogu.

Název sloupce Číslo sloupce Datový typ Comments
PKTABLE_CAT (ODBC 1.0) 1 Varchar Název katalogu primární klíčové tabulky; NULL, pokud není relevantní pro datový zdroj. Pokud ovladač podporuje katalogy pro některé tabulky, ale ne pro jiné, například když ovladač získává data z různých DBMS, vrátí prázdný řetězec ("") pro tabulky, které katalogy nemají.
PKTABLE_SCHEM (ODBC 1.0) 2 Varchar Název schématu primární klíčové tabulky; NULL, pokud není relevantní pro datový zdroj. Pokud ovladač podporuje schémata pro některé tabulky, ale ne pro jiné, například když ovladač získává data z různých DBMS, vrátí prázdný řetězec ("") pro tabulky, které schémata nemají.
PKTABLE_NAME (ODBC 1.0) 3 Varchar, ne NULL Název tabulky primárního klíče
PKCOLUMN_NAME (ODBC 1.0) 4 Varchar, ne NULL Název sloupce primárního klíče. Ovladač vrací prázdný řetězec pro sloupec, který nemá jméno.
FKTABLE_CAT (ODBC 1.0) 5 Varchar Název katalogu cizí klíčové tabulky; NULL, pokud není relevantní pro datový zdroj. Pokud ovladač podporuje katalogy pro některé tabulky, ale ne pro jiné, například když ovladač získává data z různých DBMS, vrátí prázdný řetězec ("") pro tabulky, které katalogy nemají.
FKTABLE_SCHEM (ODBC 1.0) 6 Varchar Název schématu tabulky cizích klíčů; NULL, pokud není relevantní pro datový zdroj. Pokud ovladač podporuje schémata pro některé tabulky, ale ne pro jiné, například když ovladač získává data z různých DBMS, vrátí prázdný řetězec ("") pro tabulky, které schémata nemají.
FKTABLE_NAME (ODBC 1.0) 7 Varchar, ne NULL Název tabulky cizího klíče
FKCOLUMN_NAME (ODBC 1.0) 8 Varchar, ne NULL Název sloupce cizího klíče. Ovladač vrací prázdný řetězec pro sloupec, který nemá jméno.
KEY_SEQ (ODBC 1.0) 9 Smallint, ne NULL Sloupcové pořadové číslo v tónině (začínající na 1).
UPDATE_RULE (ODBC 1.0) 10 Smallint Akce má být aplikována na cizí klíč, když je SQL operace .UPDATE Může mít jednu z následujících hodnot. (Odkazovaná tabulka je tabulka, která má primární klíč; referenční tabulka je tabulka, která má cizí klíč.)

SQL_CASCADE: Když je primární klíč referenční tabulky aktualizován, aktualizuje se také cizí klíč referenční tabulky.

SQL_NO_ACTION: Pokud by aktualizace primárního klíče referenční tabulky způsobila "visící referenci" v referenční tabulce (tj. řádky v referenční tabulce by neměly žádné protějšky v dané tabulce), aktualizace je zamítnuta. Pokud by aktualizace cizího klíče referenční tabulky zavedla hodnotu, která neexistuje jako hodnota primárního klíče referenční tabulky, aktualizace je zamítnuta. (Tato akce je stejná jako SQL_RESTRICT akce v ODBC 2*.x*.)

SQL_SET_NULL: Když je jeden nebo více řádků v referenční tabulce aktualizováno tak, že se změní jedna nebo více komponent primárního klíče, komponenty cizího klíče v referenční tabulce, které odpovídají změněným komponentám primárního klíče, jsou nastaveny na NULL ve všech odpovídajících řádcích referenční tabulky.

SQL_SET_DEFAULT: Když je jeden nebo více řádků v referenční tabulce aktualizováno tak, že se změní jedna nebo více komponent primárního klíče, komponenty cizího klíče v referenční tabulce, které odpovídají změněným komponentám primárního klíče, jsou nastaveny na příslušné výchozí hodnoty ve všech odpovídajících řádcích referenční tabulky.

NULL, pokud není relevantní pro datový zdroj.
DELETE_RULE (ODBC 1.0) 11 Smallint Akce má být aplikována na cizí klíč, když je SQL operace .DELETE Může mít jednu z následujících hodnot. (Odkazovaná tabulka je tabulka, která má primární klíč; referenční tabulka je tabulka, která má cizí klíč.)

SQL_CASCADE: Když je řádek v referenční tabulce smazán, všechny odpovídající řádky v referenčních tabulkách jsou také smazány.

SQL_NO_ACTION: Pokud by smazání řádku v referenční tabulce způsobilo "visící referenci" v referenční tabulce (tj. řádky v referenční tabulce by neměly žádné protějšky v dané tabulce), aktualizace je zamítnuta. (Tato akce je stejná jako SQL_RESTRICT akce v ODBC 2*.x*.)

SQL_SET_NULL: Když je jeden nebo více řádků v referenční tabulce smazáno, každá složka cizího klíče referenční tabulky je nastavena na NULL ve všech odpovídajících řádcích referenční tabulky.

SQL_SET_DEFAULT: Když je jeden nebo více řádků v referenční tabulce smazáno, každá složka cizího klíče referenční tabulky je nastavena na příslušné výchozí hodnoty ve všech odpovídajících řádcích referenční tabulky.

NULL, pokud není relevantní pro datový zdroj.
FK_NAME (ODBC 2.0) 12 Varchar Cizí klíčové jméno. NULL, pokud není relevantní pro datový zdroj.
PK_NAME (ODBC 2.0) 13 Varchar Hlavní název klíče. NULL, pokud není relevantní pro datový zdroj.
ODKLAD (ODBC 3.0) 14 Smallint SQL_INITIALLY_DEFERRED, SQL_INITIALLY_IMMEDIATE, SQL_NOT_DEFERRABLE.

Příklad kódu

Jak je znázorněno v následující tabulce, tento příklad používá tři tabulky nazvané OBJEDNÁVKY, ŘÁDKY a ZÁKAZNÍCI.

ŘÁDY ŘÁDKY ZÁKAZNÍCI
ORDERID ORDERID CUSTID
CUSTID ŘÁDKY JMÉNO
OTEVŘENÍ PARTID ADRESA
PRODEJCE MNOŽSTVÍ TELEFON
STATUS

V tabulce OBJEDNÁVKY CUSTID identifikuje zákazníka, kterému byl prodej uskutečněn. Jedná se o cizí klíč, který odkazuje na CUSTID v tabulce ZÁKAZNÍCI.

V tabulce LINES identifikuje ORDERID prodejní objednávku, ke které je položka přiřazena. Jedná se o cizí klíč, který odkazuje na ORDERID v tabulce ORDERS.

Tento příklad volá SQLPrimaryKeys pro získání primárního klíče tabulky ORDERS. Výsledná sada bude mít jeden řádek; Významné sloupce jsou zobrazeny v následující tabulce.

NÁZEV_TABULKY COLUMN_NAME KEY_SEQ
ŘÁDY ORDERID 1

Dále příklad volá SQLForeignKeys pro získání cizích klíčů v jiných tabulkách, které odkazují na primární klíč tabulky ORDERS. Výsledná sada bude mít jeden řádek; Významné sloupce jsou zobrazeny v následující tabulce.

PKTABLE_NAME PKCOLUMN_NAME FKTABLE_NAME FKCOLUMN_NAME KEY_SEQ
ŘÁDY CUSTID ŘÁDKY CUSTID 1

Nakonec příklad volá SQLForeignKeys pro získání cizích klíčů v tabulce ORDERS, které odkazují na primární klíče jiných tabulek. Výsledná sada bude mít jeden řádek; Významné sloupce jsou zobrazeny v následující tabulce.

PKTABLE_NAME PKCOLUMN_NAME FKTABLE_NAME FKCOLUMN_NAME KEY_SEQ
ZÁKAZNÍCI CUSTID ŘÁDY 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);  
Informace o Podívejte se
Vytvoření vazby vyrovnávací paměti ke sloupci v sadě výsledků SQLBindCol – funkce
Zrušení zpracování příkazů SQLCancel – funkce
Načítání jednoho řádku nebo bloku dat pouze ve směru dopředu Funkce SQLFetch
Načtení bloku dat nebo procházení sady výsledků SQLFetchScroll – funkce
Vrácení sloupců primárního klíče FUNKCE SQLPrimaryKeys
Statistiky a indexy v tabulkách Funkce SQLStatistics

Viz také

Referenční rozhraní ODBC API
Soubory hlaviček ODBC