Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में एक टेबल पर सभी विदेशी कुंजी सूचीबद्ध करें

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 अगर ऐसा नहीं होता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2008 में पैरामीटरयुक्त दृश्य बनाएं

  2. SQL सर्वर में एक विदेशी कुंजी बाधा में विश्वास कैसे पुनर्स्थापित करें (T-SQL उदाहरण)

  3. पांडा डेटाफ़्रेम को Microsoft SQL सर्वर तालिका में कैसे बदलें?

  4. SQL सर्वर (T-SQL) में अनुलग्नक के रूप में क्वेरी परिणाम ईमेल कैसे करें

  5. टी-एसक्यूएल:मैक्स (अन्य कॉलम) के आधार पर कॉलम का चयन करना