Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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);
Související funkce
| 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 |