SQL सर्वर में दी गई तालिका के लिए विदेशी कुंजियों की सूची वापस करने के लिए आप दो विधियों का उपयोग कर सकते हैं।
यह संदर्भित/प्राथमिक कुंजी तालिका के आधार पर विदेशी कुंजियों को वापस करने के समान है, यहां को छोड़कर, मैं संदर्भ/विदेशी कुंजी तालिका के आधार पर ही विदेशी कुंजी लौटा रहा हूं।
विकल्प 1 - sys.foreign_keys
निम्नलिखित कोड संदर्भित तालिकाओं के साथ दी गई तालिका में सभी विदेशी कुंजी बाधाओं को पुनः प्राप्त करता है।
वाइडवर्ल्ड आयातकों का उपयोग करें; OBJECT_NAME (parent_object_id) AS [FK टेबल], नाम AS [विदेशी कुंजी], OBJECT_NAME (referenced_object_id) AS [PK तालिका] से sys.foreign_keysWHERE parent_object_id =OBJECT_ID') चुनें;तथ्य। पूर्व>परिणाम:
+---------------+-------------------------------- ------------------------+---------------+| एफके टेबल | विदेशी कुंजी | पीके टेबल ||---------------+-------------------------------- ------------------------+---------------|| आदेश | FK_Fact_Order_City_Key_Dimension_City | शहर || आदेश | FK_Fact_Order_Customer_Key_Dimension_Customer | ग्राहक || आदेश | FK_Fact_Order_Stock_Item_Key_Dimension_Stock आइटम | स्टॉक आइटम || आदेश | FK_Fact_Order_Order_Date_Key_Dimension_Date | दिनांक || आदेश | FK_Fact_Order_Picked_Date_Key_Dimension_Date | दिनांक || आदेश | FK_Fact_Order_Salesperson_Key_Dimension_कर्मचारी | कर्मचारी || आदेश | FK_Fact_Order_Picker_Key_Dimension_कर्मचारी | कर्मचारी |+---------------+------------------------------------- -----------------+---------------+इस मामले में मैं WideWorldImportersDW . का उपयोग कर रहा हूं डेटाबेस, और मैं
Fact.Order
. के लिए विदेशी कुंजी लौटा रहा हूं टेबल।विकल्प 2 - sp_fkeys
किसी विशेष तालिका को संदर्भित करने वाली विदेशी कुंजी प्राप्त करने का दूसरा तरीका
sp_fkeys
. का उपयोग करना है सिस्टम संग्रहीत प्रक्रिया। यह संग्रहीत कार्यविधि हमें संदर्भित तालिका, या संदर्भ तालिका के आधार पर (अन्य बातों के अलावा) विदेशी कुंजी प्राप्त करने का विकल्प प्रदान करती है।इस मामले में हम विदेशी कुंजी तालिका के आधार पर विदेशी कुंजी प्राप्त करने में रुचि रखते हैं, इसलिए हम यह कर सकते हैं:
EXEC sp_fkeys @fktable_name ='आदेश', @fktable_owner ='तथ्य';परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
-[रिकॉर्ड 1]-------------------------- PKTABLE_QUALIFIER | वाइडवर्ल्डइम्पोर्टर्सDWPKTABLE_OWNER | आयामPKTABLE_NAME | शहरPKCOLUMN_NAME | शहर कीFKTABLE_QUALIFIER | वाइडवर्ल्डइम्पोर्टर्सDWFKTABLE_OWNER | फैक्टFKTABLE_NAME | आदेशFKCOLUMN_NAME | शहर KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_City_Key_Dimension_CityPK_NAME | PK_Dimension_CityDEFERRABILITY | 7- [रिकॉर्ड 2]---------------------------PKTABLE_QUALIFIER | वाइडवर्ल्डइम्पोर्टर्सDWPKTABLE_OWNER | आयामPKTABLE_NAME | ग्राहकPKCOLUMN_NAME | ग्राहक कुंजीFKTABLE_QUALIFIER | वाइडवर्ल्डइम्पोर्टर्सDWFKTABLE_OWNER | फैक्टFKTABLE_NAME | आदेशFKCOLUMN_NAME | ग्राहक KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Customer_Key_Dimension_CustomerPK_NAME | PK_Dimension_CustomerDEFERRABILITY | 7-[रिकॉर्ड 3]---------------------------PKTABLE_QUALIFIER | वाइडवर्ल्डइम्पोर्टर्सDWPKTABLE_OWNER | आयामPKTABLE_NAME | दिनांकPKCOLUMN_NAME | दिनांकFKTABLE_QUALIFIER | वाइडवर्ल्डइम्पोर्टर्सDWFKTABLE_OWNER | फैक्टFKTABLE_NAME | आदेशFKCOLUMN_NAME | आदेश दिनांक KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Order_Date_Key_Dimension_DatePK_NAME | PK_Dimension_DateDEFERRABILITY | 7- [रिकॉर्ड 4]---------------------------PKTABLE_QUALIFIER | वाइडवर्ल्डइम्पोर्टर्सDWPKTABLE_OWNER | आयामPKTABLE_NAME | दिनांकPKCOLUMN_NAME | दिनांकFKTABLE_QUALIFIER | वाइडवर्ल्डइम्पोर्टर्सDWFKTABLE_OWNER | फैक्टFKTABLE_NAME | आदेशFKCOLUMN_NAME | चुनी गई तिथि KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Picked_Date_Key_Dimension_DatePK_NAME | PK_Dimension_DateDEFERRABILITY | 7-[रिकॉर्ड 5]---------------------------PKTABLE_QUALIFIER | वाइडवर्ल्डइम्पोर्टर्सDWPKTABLE_OWNER | आयामPKTABLE_NAME | कर्मचारीPKCOLUMN_NAME | कर्मचारी कुंजीFKTABLE_QUALIFIER | वाइडवर्ल्डइम्पोर्टर्सDWFKTABLE_OWNER | फैक्टFKTABLE_NAME | आदेशFKCOLUMN_NAME | विक्रेता KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Salesperson_Key_Dimension_EmployeePK_NAME | PK_Dimension_कर्मचारीDEFERRABILITY | 7-[रिकॉर्ड 6]---------------------------PKTABLE_QUALIFIER | वाइडवर्ल्डइम्पोर्टर्सDWPKTABLE_OWNER | आयामPKTABLE_NAME | कर्मचारीPKCOLUMN_NAME | कर्मचारी कुंजीFKTABLE_QUALIFIER | वाइडवर्ल्डइम्पोर्टर्सDWFKTABLE_OWNER | फैक्टFKTABLE_NAME | आदेशFKCOLUMN_NAME | पिकर KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Picker_Key_Dimension_EmployeePK_NAME | PK_Dimension_कर्मचारीDEFERRABILITY | 7- [रिकॉर्ड 7] ---------------------------- PKTABLE_QUALIFIER | वाइडवर्ल्डइम्पोर्टर्सDWPKTABLE_OWNER | आयामPKTABLE_NAME | स्टॉक आइटमPKCOLUMN_NAME | स्टॉक आइटम कुंजीFKTABLE_QUALIFIER | वाइडवर्ल्डइम्पोर्टर्सDWFKTABLE_OWNER | फैक्टFKTABLE_NAME | आदेशFKCOLUMN_NAME | स्टॉक आइटम KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Stock_Item_Key_Dimension_Stock आइटमPK_NAME | PK_Dimension_Stock_ItemDEFERRABILITY | 7पैरामीटर को
@pktable_name
से बदलकर प्राथमिक कुंजी तालिका के आधार पर विदेशी कुंजियों की खोज के लिए इसे आसानी से बदला जा सकता है और@pktable_owner
:EXEC sp_fkeys @pktable_name ='सिटी', @pktable_owner ='आयाम';एक सही/गलत जांच
यदि आप केवल यह जानना चाहते हैं कि किसी तालिका में एक विदेशी कुंजी है या नहीं, लेकिन आप इसे सभी सूचीबद्ध नहीं करना चाहते हैं, तो देखें कि क्या तालिका में OBJECTPROPERTY() के साथ SQL सर्वर में एक विदेशी कुंजी है।
वह लेख
TableHasForeignKey
. का उपयोग करता हैOBJECTPROPERTY()
. का तर्क1
return वापस करने के लिए फ़ंक्शन यदि तालिका में एक विदेशी कुंजी है, और0
अगर ऐसा नहीं होता है।