Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megfelelőség
Bemutatott verzió: ODBC 1.0 Szabványoknak megfelelés: ODBC
Összefoglalás
SQLForeignKeys vissza tud adni:
A megadott táblázatban található idegen kulcsok listája (a megadott táblázatban lévő oszlopok, amelyek más táblák elsődleges kulcsaira utalnak).
Egy lista idegen kulcsokról más táblákban, amelyek a megadott táblázatban lévő elsődleges kulcsra utalnak.
Az illesztőprogram minden listát eredményként adja vissza, amely a megadott utasításon van beállítva.
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
[Bemenet] Utasításkezelő.
PKCatalogName
[Bemenet] Elsődleges kulcstáblának a katalógus neve. Ha egy illesztőprogram bizonyos táblákhoz katalógusokat támogat, másoknál nem, például amikor az illesztőprogram adatokat tölt be különböző adatbázisokból, akkor egy üres string ("") jelzi azokat a táblákat, amelyeknek nincs katalógus.
A PKCatalogName nem tartalmazhat stringkereső mintát.
Ha a SQL_ATTR_METADATA_ID utasítás attribútuma SQL_TRUE-re van beállítva, a PKCatalogName azonosítóként kezelik, és az esete nem jelentős. Ha SQL_FALSE, akkor a PKCatalogName egy átlagos érv; szó szerint kezelik, és az esete jelentős. További információ: A Catalog Functions argumentumai.
NameLength1
[Bemenet] *PKCatalogNév hossza, karakterekben.
PKSchemaName
[Bemenet] Elsődleges kulcstáblás séma név. Ha egy illesztőprogram támogatja a sémákat bizonyos táblákhoz, de másokhoz nem, például amikor az illeszőr adatokat tölt be különböző adatbázisokból, akkor egy üres string ("") jelzi azokat a táblákat, amelyeknek nincs sémájuk.
A PKSchemaName nem tartalmazhat stringkereső mintát.
Ha a SQL_ATTR_METADATA_ID állítás attribútuma SQL_TRUE-re van beállítva, a PKSchemaName azonosítóként kezelik, és az esete nem jelentős. Ha SQL_FALSE, akkor a PKSchemaName egy átlagos érv; szó szerint kezelik, és az esete jelentős.
NameLength2
[Bemenet] *PKSchemaName) hossza karakterekben.
PKTableName
[Bemenet] Elsődleges kulcstábla neve.
A PKTableName nem tartalmazhat stringkereső mintát.
Ha a SQL_ATTR_METADATA_ID utasítás attribútuma SQL_TRUE-re van beállítva, a PKTableName azonosítóként kezelhető, és az esete nem jelentős. Ha SQL_FALSE, akkor a PKTableName egy átlagos érv; szó szerint kezelik, és az esete jelentős.
NameLength3
[Bemenet] *PKTableName-hossz, karakterekben.
FKCatalogName
[Bemenet] Külföldi kulcstáblás katalógus neve. Ha egy illesztőprogram bizonyos táblákhoz katalógusokat támogat, másoknál nem, például amikor az illesztőprogram adatokat tölt be különböző adatbázisokból, akkor egy üres string ("") jelzi azokat a táblákat, amelyeknek nincs katalógus.
Az FKCatalogName nem tartalmazhat stringkereső mintát.
Ha az SQL_ATTR_METADATA_ID mondattútumot SQL_TRUE-re állították, az FKCatalogName azonosítóként kezelhető, és az esete nem jelentős. Ha SQL_FALSE, akkor az FKCatalogName egy átlagos érv; szó szerint kezelik, és az esete jelentős.
NameLength4
[Bemenet] *FKCatalogName) hossza, karakterekben.
FKSchemaName
[Bemenet] Külföldi kulcstáblás séma név. Ha egy illesztőprogram támogatja a sémákat bizonyos táblákhoz, de másokhoz nem, például amikor az illeszőr adatokat tölt be különböző adatbázisokból, akkor egy üres string ("") jelzi azokat a táblákat, amelyeknek nincs sémájuk.
Az FKSchemaName nem tartalmazhat stringkereső mintát.
Ha az SQL_ATTR_METADATA_ID utasítás attribútuma SQL_TRUE-re van beállítva, akkor az FKSchemaName azonosítóként kezelhető, és az esete nem jelentős. Ha SQL_FALSE, akkor az FKSchemaName egy átlagos érv; szó szerint kezelik, és az esete jelentős.
NameLength5
[Bemenet] *FKSchemaName) hossza karakterekben.
FKTableName
[Bemenet] Külföldi kulcstáblák neve.
Az FKTableName nem tartalmazhat string keresési mintát.
Ha a SQL_ATTR_METADATA_ID utasítás attribútuma SQL_TRUE-re van beállítva, az FKTableName azonosítóként kezelhető, és az esete nem jelentős. Ha SQL_FALSE, akkor az FKTableName egy átlagos érv; szó szerint kezelik, és az esete jelentős.
NameLength6
[Bemenet] *FKTableName, karakterekben.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR vagy SQL_INVALID_HANDLE.
Diagnostics
Amikor a SQLForeignKeys SQL_ERROR vagy SQL_SUCCESS_WITH_INFO értéket ad vissza, egy hozzárendelt SQLSTATE értéket lehet megszerezni SQLGetDiagRec hívásával, amely egy SQL_HANDLE_STMT HandleType és egy HandleType of StatementHandle (Handle) segítségével szól. Az alábbi táblázat felsorolja az SQLForeignKeys által általában visszaadott SQLSTATE értékeket, és mindegyiket elmagyarázza ezen függvény kontextusában; a "(DM)" jelölés megelőzi a Driver Manager által visszaadott SQLSTATE-leírásokat. Az egyes SQLSTATE-értékekhez társított visszatérési kód SQL_ERROR, kivéve, ha másként van feltüntetve.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Általános figyelmeztetés | Illesztőprogram-specifikus tájékoztató üzenet. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.) |
| 08S01 | Kommunikációs kapcsolat hibája | Az illesztőprogram és az adatforrás közötti kommunikációs kapcsolat, amelyhez az illesztőprogram csatlakoztatva volt, nem sikerült, mielőtt a függvény befejeződött a feldolgozás. |
| 24000 | Érvénytelen kurzorállapot | A StatementHandle kurzora nyitva volt, és az SQLFetch vagy SQLFetchScroll hívást kapta. Ezt a hibát az illesztőprogram-kezelő adja vissza, ha az SQLFetch vagy az SQLFetchScroll nem adott vissza SQL_NO_DATA, és ha az SQLFetch vagy az SQLFetchScroll visszaadta SQL_NO_DATA. A kurzor nyitva volt a StatementHandle-en, de az SQLFetch vagy SQLFetchScroll nem volt meghívva. |
| 40001 | Szerializálási hiba | A tranzakció egy erőforrás holtpontja miatt lett visszaállítva egy másik tranzakcióval. |
| 40003 | Az utasítás befejezése ismeretlen | A társított kapcsolat a függvény végrehajtása során meghiúsult, és a tranzakció állapota nem határozható meg. |
| HY000 | Általános hiba | Hiba történt, amely miatt nem volt konkrét SQLSTATE, és amelyhez nem definiáltak implementációspecifikus SQLSTATE-t. Az SQLGetDiagRec által a *MessageText pufferben visszaadott hibaüzenet leírja a hibát és annak okát. |
| HY001 | Memóriafoglalási hiba | Az illesztőprogram nem tudta lefoglalni a függvény végrehajtásának vagy befejezésének támogatásához szükséges memóriát. |
| HY008 | Művelet megszakítva | Az aszinkron feldolgozás engedélyezve lett a StatementHandle-ben. A függvényt hívták, és mielőtt befejezte volna a végrehajtást, az SQLCancel vagy SQLCancelHandle meghívása a StatementHandle-en, majd a függvényt ismét meghívták a StatementHandle-en. A függvény meghívása megtörtént, és a végrehajtás befejezése előtt az SQLCancel vagy az SQLCancelHandle egy másik szálról lett meghívva a StatementHandle-ra egy többszálas alkalmazásból. |
| HY009 | Érvénytelen null mutató használata | (DM) A PKTableName és az FKTableName érvek mindkettő null pointer volt. Az SQL_ATTR_METADATA_ID utasítás attribútumot SQL_TRUE-re állították, az FKCatalogName vagy PKCatalogName argument null mutató volt, és a SQL_CATALOG_NAME InfoType azt adja vissza, hogy a katalógusnevek támogatottak. (DM) Az SQL_ATTR_METADATA_ID utasítás attribútumot SQL_TRUE-re állították, és az FKSchemaName, PKSchemaName, FKTableName vagy PKTableName érve null mutató volt. |
| HY010 | Függvényütemezési hiba | (DM) A StatementHandle-hez társított kapcsolati leíróhoz aszinkron módon végrehajtó függvény lett meghívva. Ez az aszinkron függvény még akkor futott, amikor az SQLForeignKeys függvényt hívták. (DM) SQLExecute, SQLExecDirect vagy SQLMoreResults lett meghívva az Utasításkezelőhöz , és SQL_PARAM_DATA_AVAILABLE ad vissza. Ez a függvény az összes streamelt paraméter adatainak lekérése előtt lett meghívva. (DM) Egy aszinkron módon végrehajtó függvény (nem ez) lett meghívva az StatementHandle-hez , és a függvény meghívásakor továbbra is végrehajtó volt. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations vagy SQLSetPos lett meghívva az Utasításkezelőhöz , és SQL_NEED_DATA. Ezt a függvényt az összes adatvégrehajtási paraméter vagy oszlop adatküldése előtt hívták meg. |
| HY013 | Memóriakezelési hiba | A függvényhívás nem dolgozható fel, mert a mögöttes memóriaobjektumok nem érhetők el, esetleg a memóriahiány miatt. |
| HY090 | Érvénytelen sztring vagy puffer hossza | (DM) Az egyik névhossz érv értéke kevesebb volt, mint 0, de nem egyenlő SQL_NTS. |
| A névhossz argumentumok egyikének értéke túllépte a megfelelő név maximális hosszértékét. (Lásd: "Hozzászólások.") | ||
| HY117 | A kapcsolat ismeretlen tranzakciós állapot miatt fel van függesztve. Csak a leválasztási és írásvédett függvények engedélyezettek. | (DM) A felfüggesztett állapotról további információt az SQLEndTran függvényben talál. |
| HYC00 | A választható funkció nem implementálva | Megadtak egy katalógusnevet, és az illesztőprogram vagy adatforrás nem támogatja a katalógusokat. Megadtak egy séma nevet, és az illesztőprogram vagy adatforrás nem támogatja a sémákat. |
| Az illesztőprogram vagy az adatforrás nem támogatja a SQL_ATTR_CONCURRENCY és SQL_ATTR_CURSOR_TYPE utasításattribútumok aktuális beállításainak kombinációját. A SQL_ATTR_USE_BOOKMARKS utasítás attribútuma SQL_UB_VARIABLE lett beállítva, és a SQL_ATTR_CURSOR_TYPE utasítás attribútum olyan kurzortípusra lett beállítva, amelyhez az illesztőprogram nem támogatja a könyvjelzőket. |
||
| HYT00 | Az időtúllépés lejárt | A lekérdezés időtúllépési időtartama lejárt, mielőtt az adatforrás visszaadta az eredményhalmazt. Az időtúllépési időszak az SQLSetStmtAttr SQL_ATTR_QUERY_TIMEOUT keresztül van beállítva. |
| HYT01 | A kapcsolati időkorlát lejárt | A kapcsolat időtúllépési időtartama lejárt, mielőtt az adatforrás válaszolt a kérésre. A kapcsolat időtúllépési időszaka az SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT keresztül van beállítva. |
| IM001 | Az illesztőprogram nem támogatja ezt a függvényt | (DM) Az StatementHandle-hez társított illesztőprogram nem támogatja a függvényt. |
| IM017 | A lekérdezés aszinkron értesítési módban le van tiltva | Az értesítési modell használata esetén a lekérdezés le van tiltva. |
| IM018 | Az SQLCompleteAsync nem lett meghívva az előző aszinkron művelet végrehajtásához ezen a leírón. | Ha a leíró előző függvényhívása SQL_STILL_EXECUTING ad vissza, és ha az értesítési mód engedélyezve van, az SQLCompleteAsync-et a leírón kell meghívni a művelet utófeldolgozásához és befejezéséhez. |
Comments
Arról, hogyan használható az adott információ a funkció által visszaadott információk, lásd: Katalogikus adatok felhasználása.
Ha a *PKTableName tartalmaz egy táblanevet, akkor a SQLForeignKeys egy eredményhalmazt ad vissza, amely tartalmazza a megadott tábla elsődleges kulcsát és az összes hozzá hivatkozó külföldi kulcsot. Más táblák idegen kulcsainak listája nem tartalmaz olyan idegen kulcsokat, amelyek a megadott táblázatban egyedi korlátokra mutatnak.
Ha a *FKTableName tartalmaz táblanevet, az SQLForeignKeys egy eredményhalmazt ad vissza, amely tartalmazza az összes idegen kulcsot a megadott táblában, amelyek más táblák elsődleges kulcsaira mutatnak, valamint a többi táblára tartozó elsődleges kulcsokat, amelyekre hivatkoznak. A megadott táblázatban szereplő idegen kulcsok listája nem tartalmaz olyan idegen kulcsokat, amelyek más táblák egyedi korlátaira utalnak.
Ha mind a *PKTableName , mind a *FKTableName tartalmaz táblaneveket, akkor a SQLForeignKeys visszaadja azokat a külföldi kulcsokat a *FKTableName táblájában, amelyek a *PKTableName által megadott tábla elsődleges kulcsára utalnak. Ez legfeljebb egy kulcs lehet.
Note
Az ODBC-katalógusfüggvények általános használatáról, argumentumairól és visszaadott adatairól további információt a Catalog Functions című témakörben talál.
Az SQLForeignKeys standard eredményhalmazként adja vissza az eredményeket. Ha az elsődleges kulcshoz tartozó idegen kulcsokat kérik, az eredményhalmaz FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME és KEY_SEQ sorrendben van. Ha egy idegen kulcshoz tartozó elsődleges kulcsokat kérik, az eredményhalmaz PKTABLE_CAT, PKTABLE_SCHEM, PKTABLE_NAME és KEY_SEQ szerint sorolódik. Az alábbi táblázat az eredményhalmaz oszlopait sorolja fel.
A VARCHAR oszlopok hosszai nincsenek a táblázatban; a tényleges hosszok az adatforrástól függnek. A PKTABLE_CAT vagy FKTABLE_CAT, PKTABLE_SCHEM vagy FKTABLE_SCHEM, PKTABLE_NAME vagy FKTABLE_NAME, valamint PKCOLUMN_NAME vagy FKCOLUMN_NAME oszlop tényleges hosszának meghatározásához egy alkalmazás hívhatja az SQLGetInfo-t az SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN és SQL_MAX_COLUMN_NAME_LEN opciókkal.
Az alábbi oszlopokat ODBC 3*.x.* névre nevezték át. Az oszlopnév változásai nem befolyásolják a visszafelé kompatibilitást, mivel az alkalmazások oszlopszám alapján kötöttek.
| ODBC 2.0 oszlop | ODBC 3*.x* oszlop |
|---|---|
| PKTABLE_QUALIFIER | PKTABLE_CAT |
| PKTABLE_OWNER | PKTABLE_SCHEM |
| FKTABLE_QUALIFIER | FK_TABLE_CAT |
| FKTABLE_OWNER | FKTABLE_SCHEM |
Az alábbi táblázat az eredményhalmaz oszlopait sorolja fel. A 14. oszlopon (MEGJEGYZÉSEK) túl további oszlopokat az illesztővezető definiálhat. Az alkalmazásnak hozzáférést kell szereznie az illesztőprogram-specifikus oszlopokhoz úgy, hogy az eredményhalmaz végétől lefelé számlál, nem pedig explicit sorrendi pozíciót ad meg. További információ: Catalog Functions által visszaadott adatok.
| Oszlop név | Oszlopszám | Adattípus | Comments |
|---|---|---|---|
| PKTABLE_CAT (ODBC 1.0) | 1 | Varchar | Elsődleges kulcstáblás katalógus neve; NULL, ha nem vonatkozik az adatforrásra. Ha egy illezser egyes táblákhoz támogatja a katalógusokat, míg másoknál nem, például amikor az illesztőprogram adatokat tölt be különböző adatbázisokból, akkor üres stringet ("") ad vissza azokra a táblákra, amelyeknek nincs katalógus. |
| PKTABLE_SCHEM (ODBC 1.0) | 2 | Varchar | Elsődleges kulcstábla séma neve; NULL, ha nem vonatkozik az adatforrásra. Ha egy illezser egyes táblákhoz támogatja a sémákat, míg másoknál nem, például amikor az illesztőprogram adatokat kér különböző adatbázisokból, akkor üres stringet ("") ad vissza azokra a táblákra, amelyeknek nincs sémájuk. |
| PKTABLE_NAME (ODBC 1.0) | 3 | Varchar nem NULL | Elsődleges kulcstábla neve. |
| PKCOLUMN_NAME (ODBC 1.0) | 4 | Varchar nem NULL | Elsődleges kulcsoszlop neve. Az illesztőprogram üres stringet ad vissza egy olyan oszlophoz, amelynek nincs neve. |
| FKTABLE_CAT (ODBC 1.0) | 5 | Varchar | Külföldi kulcstáblák katalógusának neve; NULL, ha nem vonatkozik az adatforrásra. Ha egy illezser egyes táblákhoz támogatja a katalógusokat, míg másoknál nem, például amikor az illesztőprogram adatokat tölt be különböző adatbázisokból, akkor üres stringet ("") ad vissza azokra a táblákra, amelyeknek nincs katalógus. |
| FKTABLE_SCHEM (ODBC 1.0) | 6 | Varchar | Idegen kulcstáblás séma név; NULL, ha nem vonatkozik az adatforrásra. Ha egy illezser egyes táblákhoz támogatja a sémákat, míg másoknál nem, például amikor az illesztőprogram adatokat kér különböző adatbázisokból, akkor üres stringet ("") ad vissza azokra a táblákra, amelyeknek nincs sémájuk. |
| FKTABLE_NAME (ODBC 1.0) | 7 | Varchar nem NULL | Idegenkulcs-tábla neve. |
| FKCOLUMN_NAME (ODBC 1.0) | 8 | Varchar nem NULL | Külföldi kulcsoszlop neve. Az illesztőprogram üres stringet ad vissza egy olyan oszlophoz, amelynek nincs neve. |
| KEY_SEQ (ODBC 1.0) | 9 | Smallint nem NULL | Az oszlop sorszáma kulcsban (1-cel kezdődve). |
| UPDATE_RULE (ODBC 1.0) | 10 | Smallint | Művelet, amelyet az idegen kulcsra kell alkalmazni, ha az SQL művelet .UPDATE Az alábbi értékek egyike lehet. (A hivatkozott tábla az a tábla, amelynek elsődleges kulcsa van; a hivatkozási tábla az a tábla, amely az idegen kulcsot tartalmazza.) SQL_CASCADE: Amikor a hivatkozott tábla elsődleges kulcsa frissül, a hivatkozási tábla külföldi kulcsa is frissül. SQL_NO_ACTION: Ha a hivatkozott táblázat elsődleges kulcsának frissítése "függő hivatkozást" okoz a hivatkozási táblában (vagyis a hivatkozási táblázat sorainak nem tartalmaznak megfelelőjüket), a frissítést elutasítják. Ha a hivatkozó tábla idegen kulcsának frissítése olyan értéket vezet be, amely nem létezik a hivatkozott tábla elsődleges kulcsának értékeként, a frissítést elutasítják. (Ez a művelet ugyanaz, mint az ODBC 2*.x* SQL_RESTRICT akciója.) SQL_SET_NULL: Ha a hivatkozott táblázat egyik vagy több sorát úgy frissítik, hogy az elsődleges kulcs egyik vagy több komponense megváltozik, a hivatkozási táblában az idegen kulcs komponensei, amelyek megfelelnek az elsődleges kulcs megváltoztatott komponenseineknek, nullra vannak állítva a hivatkozási táblázat összes megfelelő sorában. SQL_SET_DEFAULT: Ha a hivatkozott táblázat egy vagy több sorát úgy frissítik, hogy az elsődleges kulcs egy vagy több komponense megváltozik, akkor a hivatkozási táblában lévő idegen kulcs összetevői, amelyek megfelelnek az elsődleges kulcs megváltoztatott komponenseinek, az összes egyező sorban az alapértelmezett értékekre vannak állítva. NULL, ha nem vonatkozik az adatforrásra. |
| DELETE_RULE (ODBC 1.0) | 11 | Smallint | Művelet, amelyet az idegen kulcsra kell alkalmazni, ha az SQL művelet .DELETE Az alábbi értékek egyike lehet. (A hivatkozott tábla az a tábla, amelynek elsődleges kulcsa van; a hivatkozási tábla az a tábla, amely az idegen kulcsot tartalmazza.) SQL_CASCADE: Amikor a hivatkozott táblázat egy sorát töröljük, az összes egyező sor a hivatkozó táblákban is törlődik. SQL_NO_ACTION: Ha egy sor törlése a hivatkozott táblából "függő hivatkozást" okoz a hivatkozási táblában (vagyis a hivatkozási táblázat sorainak nem lenne megfelelői a hivatkozott táblában), a frissítést elutasítják. (Ez a művelet ugyanaz, mint az ODBC 2*.x* SQL_RESTRICT akciója.) SQL_SET_NULL: Ha a hivatkozott táblázat egyik vagy több sorát töröljük, a hivatkozási tábla idegen kulcsának minden komponense nullra van állítva az utaló tábla összes megfelelő sorában. SQL_SET_DEFAULT: Ha a hivatkozott táblázat egyik vagy több sorát töröljük, a hivatkozási tábla idegen kulcsának minden komponense az adott alapértelmezett beállításra van állítva az összes egyező sorban. NULL, ha nem vonatkozik az adatforrásra. |
| FK_NAME (ODBC 2.0) | 12 | Varchar | Külföldi kulcsnév. NULL, ha nem vonatkozik az adatforrásra. |
| PK_NAME (ODBC 2.0) | 13 | Varchar | Elsődleges kulcsnév. NULL, ha nem vonatkozik az adatforrásra. |
| HALASZTHATÓSÁG (ODBC 3.0) | 14 | Smallint | SQL_INITIALLY_DEFERRED, SQL_INITIALLY_IMMEDIATE, SQL_NOT_DEFERRABLE. |
Kódpélda
Ahogy a következő táblázatban látható, ez a példa három táblát használ, amelyeket ORDERS, LINES és CUSTOMERS néven ismertek.
| PARANCSOK | SOROK | ÜGYFELEK |
|---|---|---|
| ORDERID | ORDERID | CUSTID |
| CUSTID | SOROK | NÉV |
| NYITÓIDŐPONT | PARTID | CÍM |
| ELADÓ | MENNYISÉG | TELEFON |
| STATUS |
A ORDERS táblázatban a CUSTID megjelöli azt az ügyfelet, akinek az eladás történt. Ez egy idegen kulcs, amely a CUSTID-re utal a CUSTOMERS táblában.
A SOROK táblában az ORDERID azonosítja azt az értékesítési rendelést, amelyhez a sortétel kapcsolódik. Ez egy idegen kulcs, amely a ORDERS táblában az ORDERID-re utal.
Ez a példa az SQLPrimaryKeys-t hívja, hogy megkapja a ORDERS tábla elsődleges kulcsát. Az eredményhalmaznak egy sora lesz; a jelentős oszlopokat az alábbi táblázat mutatja.
| TABLE_NAME | COLUMN_NAME | KEY_SEQ |
|---|---|---|
| PARANCSOK | ORDERID | 1 |
Ezután a példa SQLForeignKeys-t hívja, hogy megkapja a külföldi kulcsokat más táblákból, amelyek a ORDERS tábla elsődleges kulcsára hivatkoznak. Az eredményhalmaznak egy sora lesz; a jelentős oszlopokat az alábbi táblázat mutatja.
| PKTABLE_NAME | PKCOLUMN_NAME | FKTABLE_NAME | FKCOLUMN_NAME | KEY_SEQ |
|---|---|---|---|---|
| PARANCSOK | CUSTID | SOROK | CUSTID | 1 |
Végül a példa az SQLForeignKeys-t hívja, hogy megkapja azokat az idegen kulcsokat a ORDERS táblában, amelyek más táblák elsődleges kulcsaira utalnak. Az eredményhalmaznak egy sora lesz; a jelentős oszlopokat az alábbi táblázat mutatja.
| PKTABLE_NAME | PKCOLUMN_NAME | FKTABLE_NAME | FKCOLUMN_NAME | KEY_SEQ |
|---|---|---|---|---|
| ÜGYFELEK | CUSTID | PARANCSOK | 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);
Kapcsolódó funkciók
| Információ erről: | Nézze |
|---|---|
| Puffer kötése egy eredményhalmaz oszlopához | SQLBindCol függvény |
| Utasításfeldolgozás megszakítása | SQLCancel függvény |
| Egy sor vagy adatblokk előrelépési irányban történő lekérése | SQLFetch függvény |
| Adatblokk beolvasása vagy egy eredményhalmaz görgetése | SQLFetchScroll függvény |
| Elsődleges kulcs oszlopainak visszaadása | SQLPrimaryKeys függvény |
| Táblázatstatisztikák és indexek visszaadása | SQLStatistics Function |