Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uygunluk
Tanıtılan Sürüm: ODBC 1.0 Standartlar Uyumu: ODBC
Özet
SQLForeignKeys şunları döndürebilir:
Belirtilen tablodaki yabancı anahtarların listesi (belirtilen tablodaki sütunlar, diğer tablolardaki birincil anahtarlara atıfta bulunur).
Belirtilen tablodaki birincil anahtara atıfta bulunan diğer tablolardaki yabancı anahtarların listesi.
Sürücü, her listeyi belirtilen ifadede bir sonuç seti olarak döndürür.
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
[Giriş] Deyim tanıtıcısı.
PKatalogName
[Giriş] Birincil anahtar tablo katalog adı. Bir sürücü bazı tablolar için katalogları desteklerken diğerleri için desteklemiyorsa, örneğin sürücü farklı DBMS'lerden veri alırken, boş bir dizi ("") katalogları olmayan tabloları gösterir.
PKCatalogName bir dizi arama deseni içeremez.
Eğer SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmışsa, PKCatalogName tanımlayıcı olarak kabul edilir ve durumu anlamlı değildir. Eğer SQL_FALSE ise, PKCatalogName sıradan bir argümandır; kelime kelimesi kelimesine ele alınır ve durumu önemlidir. Daha fazla bilgi için bkz. Katalog İşlevleri'ndeki Bağımsız Değişkenler.
NameLength1
[Giriş] *PKCatalogName'in uzunluğu, karakter olarak.
PKSchemaName
[Giriş] Birincil anahtar tablo şema adı. Bir sürücü bazı tablolar için şemaları desteklerken diğerleri için desteklemiyorsa, örneğin sürücü farklı DBMS'lerden veri alırken, boş bir dizi ("") şema olmayan tabloları gösterir.
PKSchemaName bir dizi arama deseni içeremez.
SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmışsa, PKSchemaName tanımlayıcı olarak ele alınır ve durumu anlamlı değildir. Eğer SQL_FALSE ise, PKSchemaName sıradan bir argümandır; kelime kelimesi kelimesine ele alınır ve durumu önemlidir.
NameLength2
[Giriş] *PKSchemaName'in uzunluğu, karakter olarak.
PKTableName
[Giriş] Birincil anahtar tablo adı.
PKTableName bir dizi arama deseni içeremez.
SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmışsa, PKTableName tanımlayıcı olarak kabul edilir ve durumu anlamlı değildir. Eğer SQL_FALSE ise, PKTableName sıradan bir argümandır; kelime kelimesi kelimesine ele alınır ve durumu önemlidir.
NameLength3
[Giriş] *PKTableName'in uzunluğu, karakter olarak.
FKCatalogName
[Giriş] Yabancı anahtar tablosu katalog adı. Bir sürücü bazı tablolar için katalogları desteklerken diğerleri için desteklemiyorsa, örneğin sürücü farklı DBMS'lerden veri alırken, boş bir dizi ("") katalogları olmayan tabloları gösterir.
FKCatalogName bir dize arama deseni içeremez.
Eğer SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmışsa, FKCatalogName tanımlayıcı olarak ele alınır ve durumu anlamlı değildir. Eğer SQL_FALSE ise, FKCatalogName sıradan bir argümandır; kelime kelimesi kelimesine ele alınır ve durumu önemlidir.
NameLength4
[Giriş] *FKCatalogName'in uzunluğu, karakter olarak.
FKSchemaName
[Giriş] Yabancı anahtar tablo şema adı. Bir sürücü bazı tablolar için şemaları desteklerken diğerleri için desteklemiyorsa, örneğin sürücü farklı DBMS'lerden veri alırken, boş bir dizi ("") şema olmayan tabloları gösterir.
FKSchemaName bir dizi arama deseni içeremez.
Eğer SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmışsa, FKSchemaName tanımlayıcı olarak kabul edilir ve durumu anlamlı değildir. Eğer SQL_FALSE ise, FKSchemaName sıradan bir argümandır; kelime kelimesi kelimesine ele alınır ve durumu önemlidir.
NameLength5
[Giriş] *FKSchemaName'in uzunluğu, karakter olarak.
FKTableName
[Giriş] Yabancı anahtar tablo adı.
FKTableName bir dizi arama deseni içeremez.
Eğer SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmışsa, FKTableName tanımlayıcı olarak ele alınır ve durumu anlamlı değildir. Eğer SQL_FALSE ise, FKTableName sıradan bir argümandır; kelime kelimesi kelimesine ele alınır ve durumu önemlidir.
NameLength6
[Giriş] *FKTableName'in uzunluğu, karakter olarak.
İadeler
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR ya da SQL_INVALID_HANDLE.
Diagnostics
SQLForeignKeys SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, ilişkili bir SQLSTATE değeri SQLGetDiagRec çağrılarak SQL_HANDLE_STMT HandleType ve HandleHandle ile elde edilebilir. Aşağıdaki tablo, genellikle SQLForeignKeys tarafından duygulanan SQLSTATE değerlerini listeler ve her birini bu fonksiyon bağlamında açıklar; "(DM)" gösterimi, Sürücü Yöneticisi tarafından döndürülen SQLSTATE açıklamalarından önce gelir. Aksi belirtilmediği sürece, her SQLSTATE değeriyle ilişkili dönüş kodu SQL_ERROR.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Genel uyarı | Sürücüye özgü bilgilendirici ileti. (İşlev SQL_SUCCESS_WITH_INFO döndürür.) |
| 08S01 | İletişim bağlantısı hatası | sürücü ile sürücünün bağlandığı veri kaynağı arasındaki iletişim bağlantısı, işlev işlenmeden önce başarısız oldu. |
| 24000 | Geçersiz imleç durumu |
StatementHandle'da bir imleç açıktı ve SQLFetch veya SQLFetchScroll çağrılmıştı.
BU hata, SQLFetch veya SQLFetchScroll SQL_NO_DATA döndürmediyse Sürücü Yöneticisi tarafından döndürülür ve SQLFetch veya SQLFetchScroll SQL_NO_DATA döndürdüyse sürücü tarafından döndürülür. StatementHandle'da bir imleç açıktı, ancak SQLFetch veya SQLFetchScroll çağrılmamıştı. |
| 40001 | Serileştirme hatası | Başka bir işlemle kaynak kilitlenmesi nedeniyle işlem geri alındı. |
| 40003 | Deyim tamamlama bilinmiyor | İlişkili bağlantı bu işlevin yürütülmesi sırasında başarısız oldu ve işlemin durumu belirlenemiyor. |
| HY000 | Genel hata | Belirli bir SQLSTATE olmayan ve uygulamaya özgü SQLSTATE tanımlanmayan bir hata oluştu. *MessageText arabelleğinde SQLGetDiagRec tarafından döndürülen hata iletisi, hatayı ve nedenini açıklar. |
| HY001 | Bellek ayırma hatası | Sürücü, işlevin yürütülmesini veya tamamlanmasını desteklemek için gereken belleği ayıramadı. |
| HY008 | İşlem iptal edildi |
StatementHandle için zaman uyumsuz işleme etkinleştirildi. Fonksiyon çağrıldı ve çalıştırma tamamlanmadan önce StatementHandleüzerinde SQLCancel veya SQLCancelHandle çağrıldı ve ardından StatementHandle üzerinde fonksiyon tekrar çağrıldı. İşlev çağrıldı ve yürütme tamamlanmadan önce, çok iş parçacıklı bir uygulamadaki farklı bir iş parçacığından StatementHandle üzerinde SQLCancel veya SQLCancelHandle çağrıldı. |
| HY009 | Geçersiz null işaretçi kullanımı | (DM) PKTableName ve FKTableName argümanları her ikisi de null pointer'dı. SQL_ATTR_METADATA_ID ifadesi özitniteliği SQL_TRUE olarak ayarlanmıştı, FKCatalogName veya PKCatalogName argümanı bir null işaretçiydi ve SQL_CATALOG_NAME InfoType katalog adlarının desteklendiğini döndürdü. (DM) SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmıştı ve FKSchemaName, PKSchemaName, FKTableName veya PKTableName argümanı bir null işaretçiydi. |
| HY010 | İşlev dizisi hatası | (DM) StatementHandle ile ilişkili bağlantı tanıtıcısı için zaman uyumsuz olarak yürütülen bir işlev çağrıldı. Bu asenkron fonksiyon, SQLForeignKeys fonksiyonu çağrıldığında hâlâ çalışıyordu. (DM) SQLExecute, SQLExecDirect veya SQLMoreResults, StatementHandle için çağrıldı ve SQL_PARAM_DATA_AVAILABLE döndürdü. Bu işlev, tüm akış parametreleri için veri alınmadan önce çağrıldı. (DM) StatementHandle için zaman uyumsuz olarak yürütülen bir işlev (bu işlev değil) çağrıldı ve bu işlev çağrıldığında hala yürütülüyordu. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations veya SQLSetPos, StatementHandle için çağrıldı ve SQL_NEED_DATA döndürdü. Bu işlev, tüm yürütme sırasında veri parametreleri veya sütunları için veri gönderilmeden önce çağrıldı. |
| HY013 | Bellek yönetimi hatası | Büyük olasılıkla düşük bellek koşulları nedeniyle, temel alınan bellek nesnelerine erişilemediğinden işlev çağrısı işlenemedi. |
| HY090 | Geçersiz dize veya arabellek uzunluğu | (DM) İsim uzunluğu argümanlarından birinin değeri 0'dan küçüktü ancak SQL_NTS'ye eşit değildi. |
| Ad uzunluğu bağımsız değişkenlerinden birinin değeri, karşılık gelen ad için uzunluk üst sınırını aştı. ("Yorumlar" bölümüne bakınız.) | ||
| HY117 | Bilinmeyen işlem durumu nedeniyle bağlantı askıya alındı. Yalnızca bağlantıyı kesme ve salt okunur işlevlere izin verilir. | (DM) Askıya alınma durumu hakkında daha fazla bilgi için bkz. SQLEndTran İşlevi. |
| HYC00 | İsteğe bağlı özellik uygulanmadı | Bir katalog adı belirtilmiş ve sürücü veya veri kaynağı katalogları desteklememektedir. Bir şema adı belirtilmiş ve sürücü ya da veri kaynağı şemaları desteklemiyor. |
| SQL_ATTR_CONCURRENCY ve SQL_ATTR_CURSOR_TYPE deyimi özniteliklerinin geçerli ayarlarının birleşimi sürücü veya veri kaynağı tarafından desteklenmiyordu. SQL_ATTR_USE_BOOKMARKS deyimi özniteliği SQL_UB_VARIABLE olarak, SQL_ATTR_CURSOR_TYPE deyimi özniteliği ise sürücünün yer işaretlerini desteklemediği bir imleç türüne ayarlandı. |
||
| HYT00 | Zaman aşımı süresi doldu | Veri kaynağı sonuç kümesini döndürmeden önce sorgu zaman aşımı süresi doldu. Zaman aşımı süresi SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT aracılığıyla ayarlanır. |
| HYT01 | Bağlantı zaman aşımı süresi doldu | Veri kaynağı isteği yanıtlamadan önce bağlantı zaman aşımı süresi doldu. Bağlantı zaman aşımı süresi SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT aracılığıyla ayarlanır. |
| IM001 | Sürücü bu işlevi desteklemiyor | (DM) StatementHandle ile ilişkili sürücü işlevi desteklemiyor. |
| IM017 | Yoklama zaman uyumsuz bildirim modunda devre dışı bırakıldı | Bildirim modeli her kullanıldığında yoklama devre dışı bırakılır. |
| IM018 | SQLCompleteAsync , bu tanıtıcıda önceki zaman uyumsuz işlemi tamamlamak için çağrılmadı. | Tanıtıcıdaki önceki işlev çağrısı SQL_STILL_EXECUTING döndürüyorsa ve bildirim modu etkinleştirildiyse, son işlemeyi yapmak ve işlemi tamamlamak için tanıtıcıda SQLCompleteAsync çağrılmalıdır. |
Comments
Bu fonksiyonun verdiği bilgilerin nasıl kullanılabileceğine dair bilgi için Kullanım Katalog Verileri'ne bakınız.
Eğer *PKTableName bir tablo adı içeriyorsa, SQLForeignKeys belirtilen tablonun birincil anahtarını ve ona atıfta bulunan tüm yabancı anahtarları içeren bir sonuç kümesi döner. Diğer tablolardaki yabancı anahtarlar listesi, belirtilen tablodaki benzersiz kısıtlamalara işaret eden yabancı anahtarları içermez.
Eğer *FKTableName bir tablo adı içeriyorsa, SQLForeignKeys belirtilen tablodaki diğer tablolardaki birincil anahtarlara işaret eden tüm yabancı anahtarları ve referans aldıkları diğer tablolardaki birincil anahtarları içeren bir sonuç kümesi döner. Belirtilen tablodaki yabancı anahtarlar listesi, diğer tablolardaki benzersiz kısıtlamalara atıfta bulunan yabancı anahtarları içermez.
Eğer hem *PKTableName hem de *FKTableName tablo adları içeriyorsa, SQLForeignKeys , *FKTableName içinde belirtilen tablodaki yabancı anahtarları döndürür; bu anahtarlar *PKTableName içinde belirtilen tablonun birincil anahtarına atıfta bulunur. Bu en fazla bir anahtar olmalı.
Note
ODBC katalog işlevlerinin genel kullanımı, bağımsız değişkenleri ve döndürülen verileri hakkında daha fazla bilgi için bkz . Katalog İşlevleri.
SQLForeignKeys , standart bir sonuç kümesi olarak sonuçları döndürür. Birincil anahtara bağlı yabancı anahtarlar istenirse, sonuç kümesi FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME ve KEY_SEQ olarak sıralanır. Yabancı anahtara bağlı birincil anahtarlar istenirse, sonuç kümesi PKTABLE_CAT, PKTABLE_SCHEM, PKTABLE_NAME ve KEY_SEQ olarak sıralanır. Aşağıdaki tabloda sonuç kümesindeki sütunlar listelenir.
VARCHAR sütunlarının uzunlukları tabloda gösterilmemiştir; Gerçek uzunluklar veri kaynağına bağlıdır. PKTABLE_CAT veya FKTABLE_CAT, PKTABLE_SCHEM veya FKTABLE_SCHEM, PKTABLE_NAME veya FKTABLE_NAME ve PKCOLUMN_NAME veya FKCOLUMN_NAME sütunlarının gerçek uzunluklarını belirlemek için bir uygulama, SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN ve SQL_MAX_COLUMN_NAME_LEN seçenekleriyle SQLGetInfo'yu çağırabilir.
Aşağıdaki sütunlar ODBC 3*.x için yeniden adlandırılmıştır.* Sütun adı değişiklikleri, uygulamalar sütun numarasına göre bağlandığı için geriye dönük uyumluluk etkisini sağlamaz.
| ODBC 2.0 sütunu | ODBC 3*.x* sütunu |
|---|---|
| PKTABLE_QUALIFIER | PKTABLE_CAT |
| PKTABLE_OWNER | PKTABLE_SCHEM |
| FKTABLE_QUALIFIER | FK_TABLE_CAT |
| FKTABLE_OWNER | FKTABLE_SCHEM |
Aşağıdaki tabloda sonuç kümesindeki sütunlar listelenir. 14. sütunun (NOTLAR) ötesinde ek sütunlar sürücü tarafından tanımlanabilir. Bir uygulama, açık bir sıralı konum belirtmek yerine sonuç kümesinin sonundan geri sayarak sürücüye özgü sütunlara erişim elde etmelidir. Daha fazla bilgi için bkz. Katalog İşlevleri Tarafından Döndürülen Veriler.
| Sütun adı | Sütun numarası | Veri türü | Comments |
|---|---|---|---|
| PKTABLE_CAT (ODBC 1.0) | 1 | Varchar | Birincil anahtar tablo katalog adı; Veri kaynağına uygulanmıyorsa NULL. Bir sürücü bazı tablolar için katalogları desteklerken diğerleri için desteklemiyorsa, örneğin sürücü farklı DBMS'lerden veri aldığında, katalogları olmayan tablolar için boş bir dizi ("") döner. |
| PKTABLE_SCHEM (ODBC 1.0) | 2 | Varchar | Birincil anahtar tablo şema adı; Veri kaynağına uygulanmıyorsa NULL. Bir sürücü bazı tablolar için şemaları desteklerken diğerleri için desteklemiyorsa, örneğin sürücü farklı DBMS'lerden veri alırsa, şema olmayan tablolar için boş bir diziyi ("") döndürür. |
| PKTABLE_NAME (ODBC 1.0) | 3 | Varchar NULL değil | Birincil anahtar tablo adı. |
| PKCOLUMN_NAME (ODBC 1.0) | 4 | Varchar NULL değil | Birincil anahtar sütun adı. Sürücü, adı olmayan bir sütun için boş bir diziyi döndürür. |
| FKTABLE_CAT (ODBC 1.0) | 5 | Varchar | Yabancı anahtar tablosu katalog adı; Veri kaynağına uygulanmıyorsa NULL. Bir sürücü bazı tablolar için katalogları desteklerken diğerleri için desteklemiyorsa, örneğin sürücü farklı DBMS'lerden veri aldığında, katalogları olmayan tablolar için boş bir dizi ("") döner. |
| FKTABLE_SCHEM (ODBC 1.0) | 6 | Varchar | Yabancı anahtar tablo şema adı; Veri kaynağına uygulanmıyorsa NULL. Bir sürücü bazı tablolar için şemaları desteklerken diğerleri için desteklemiyorsa, örneğin sürücü farklı DBMS'lerden veri alırsa, şema olmayan tablolar için boş bir diziyi ("") döndürür. |
| FKTABLE_NAME (ODBC 1.0) | 7 | Varchar NULL değil | Yabancı anahtar tablo adı. |
| FKCOLUMN_NAME (ODBC 1.0) | 8 | Varchar NULL değil | Yabancı anahtar sütun adı. Sürücü, adı olmayan bir sütun için boş bir diziyi döndürür. |
| KEY_SEQ (ODBC 1.0) | 9 | Smallint NULL değil | Sütun dizisi numarası anahtarda (1 ile başlar). |
| UPDATE_RULE (ODBC 1.0) | 10 | Smallint | SQL işlemi UPDATEolduğunda yabancı anahtara uygulanacak eylem. Aşağıdaki değerlerden birine sahip olabilir. (Referans verilen tablo, birincil anahtara sahip olan tablodur; referans tablosu ise yabancı anahtara sahip tablodur.) SQL_CASCADE: Referans tablosunun birincil anahtarı güncellendiğinde, referans tablosunun yabancı anahtarı da güncellenir. SQL_NO_ACTION: Referans tablosunun birincil anahtarının güncellenmesi, referans tablosunda "asılı referans" yaratacaksa (yani, referans tablosundaki satırların referans tablosunda muadilleri olmayacaksa), güncelleme reddedilir. Referans tablosunun yabancı anahtarının güncellenmesi, referans edilen tablonun birincil anahtarının değeri olarak mevcut olmayan bir değer getirecekse, güncelleme reddedilir. (Bu eylem, ODBC 2*.x*'deki SQL_RESTRICT eylemle aynıdır.) SQL_SET_NULL: Referans tablosunda bir veya daha fazla satır ana anahtarın bir veya daha fazla bileşeni değiştirilecek şekilde güncellendiğinde, referans tablosunda ana anahtarın değiştirilen bileşenlerine karşılık gelen yabancı anahtarın bileşenleri, referans tablosunun tüm eşleşen satırlarında NULL olarak ayarlanır. SQL_SET_DEFAULT: Referans edilen tablodaki bir veya daha fazla satır ana anahtarın bir veya daha fazla bileşeni değiştirilecek şekilde güncellendiğinde, referans tablosunda ana anahtarın değişen bileşenlerine karşılık gelen yabancı anahtar bileşenleri, referans tablosunun tüm eşleşen satırlarında geçerli varsayılan değerlere ayarlanır. Veri kaynağına uygulanmıyorsa NULL. |
| DELETE_RULE (ODBC 1.0) | 11 | Smallint | SQL işlemi DELETEolduğunda yabancı anahtara uygulanacak eylem. Aşağıdaki değerlerden birine sahip olabilir. (Referans verilen tablo, birincil anahtara sahip olan tablodur; referans tablosu ise yabancı anahtara sahip tablodur.) SQL_CASCADE: Referans edilen tablodaki bir satır silindiğinde, referans tablolarındaki tüm eşleşen satırlar da silinir. SQL_NO_ACTION: Referans verilen tablodaki bir satırın silinmesi, referans tablosunda "asılı referans" yaratacaksa (yani, referans tablosundaki satırlar referans tablosunda karşılık görmez), güncelleme reddedilir. (Bu eylem, ODBC 2*.x*'deki SQL_RESTRICT eylemle aynıdır.) SQL_SET_NULL: Referans edilen tablodaki bir veya daha fazla satır silindiğinde, referans tablosunun yabancı anahtarının her bileşeni, referans tablosunun tüm eşleşen satırlarında NULL olarak ayarlanır. SQL_SET_DEFAULT: Referans tablosunda bir veya daha fazla satır silindiğinde, referans tablosunun yabancı anahtarının her bileşeni, referans tablosunun tüm eşleşen satırlarında geçerli varsayılan olarak ayarlanır. Veri kaynağına uygulanmıyorsa NULL. |
| FK_NAME (ODBC 2.0) | 12 | Varchar | Yabancı anahtar adı. Veri kaynağına uygulanmıyorsa NULL. |
| PK_NAME (ODBC 2.0) | 13 | Varchar | Birincil anahtar adı. Veri kaynağına uygulanmıyorsa NULL. |
| ERTELENEBILICILIK (ODBC 3.0) | 14 | Smallint | SQL_INITIALLY_DEFERRED, SQL_INITIALLY_IMMEDIATE, SQL_NOT_DEFERRABLE. |
Kod Örneği
Aşağıdaki tabloda gösterildiği gibi, bu örnek üç tablo kullanır: SIPARIŞLER, HATLAR ve MÜŞTERILER.
| EMIRLER | SATIR | MÜŞTERILER |
|---|---|---|
| ORDERID | ORDERID | CUSTID |
| CUSTID | SATIR | İSİM |
| AÇIK TARIH | PARTID | ADRES |
| SATIŞ UZMANI | MİKTAR | TELEFON |
| STATUS |
ORDERS tablosunda CUSTED, satışın yapıldığı müşteriyi belirler. CUSTOMERS tablosunda CUSID'i ifade eden yabancı bir anahtardır.
SATLAR tablosunda ORDERID, satır öğesinin ilişkilendirildiği satış sırasını tanımlar. ORDERS tablosunda ORDERID'ye atıfta bulunan yabancı bir anahtardır.
Bu örnek, ORDERS tablosunun birincil anahtarını almak için SQLPrimaryKeys çağırır. Sonuç seti bir satırdan oluşur; Önemli sütunlar aşağıdaki tabloda gösterilmiştir.
| TABLE_NAME | COLUMN_NAME | KEY_SEQ |
|---|---|---|
| EMIRLER | ORDERID | 1 |
Sonra, örnek, ORDERS tablosunun birincil anahtarına referans veren diğer tablolardaki yabancı anahtarları almak için SQLForeignKeys çağırır. Sonuç seti bir satırdan oluşur; Önemli sütunlar aşağıdaki tabloda gösterilmiştir.
| PKTABLE_NAME | PKCOLUMN_NAME | FKTABLE_NAME | FKCOLUMN_NAME | KEY_SEQ |
|---|---|---|---|---|
| EMIRLER | CUSTID | SATIR | CUSTID | 1 |
Son olarak, örnek SQLForeignKeys çağrısıyla ORDERS tablosundaki yabancı anahtarları alır ve bu anahtarlar diğer tabloların birincil anahtarlarına atıfta bulunur. Sonuç seti bir satırdan oluşur; Önemli sütunlar aşağıdaki tabloda gösterilmiştir.
| PKTABLE_NAME | PKCOLUMN_NAME | FKTABLE_NAME | FKCOLUMN_NAME | KEY_SEQ |
|---|---|---|---|---|
| MÜŞTERILER | CUSTID | EMIRLER | 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);
İlgili Fonksiyonlar
| Hakkında bilgi için | Bkz: |
|---|---|
| Sonuç kümesindeki bir sütuna arabellek bağlama | SQLBindCol İşlevi |
| Deyim işlemeyi iptal etme | SQLCancel İşlevi |
| Tek bir satır veya veri bloğunu sadece ileri yönde almak | SQLFetch İşlevi |
| Veri bloğunu getirme veya sonuç kümesinde kaydırma | SQLFetchScroll İşlevi |
| Birincil anahtarın sütunlarını döndürme | SQLPrimaryKeys İşlevi |
| Tablo istatistikleri ve indeksleri geri getirilmesi | SQLStatistics Fonksiyonu |