यदि आपको SQL सर्वर में दी गई तालिका को संदर्भित करने वाली सभी विदेशी कुंजियों को वापस करने की आवश्यकता है, तो निम्न विधियों में से एक का प्रयास करें।
पहली विधि sys.foreign_keys
. से पूछताछ करती है सिस्टम दृश्य। दूसरी विधि sp_fkeys
. को निष्पादित करती है सिस्टम संग्रहीत प्रक्रिया।
विकल्प 1 - sys.foreign_keys
निम्न कोड प्राथमिक कुंजी और विदेशी कुंजी तालिकाओं के साथ किसी दिए गए तालिका को संदर्भित करने वाली सभी विदेशी कुंजी पुनर्प्राप्त करता है। मैं विदेशी कुंजी तालिकाओं के लिए स्कीमा भी शामिल करता हूं।
USE WideWorldImportersDW; SELECT OBJECT_NAME(referenced_object_id) AS [PK Table], name AS [Foreign Key], SCHEMA_NAME(schema_id) AS [FK Schema], OBJECT_NAME(parent_object_id) AS [FK Table] FROM sys.foreign_keys WHERE referenced_object_id = OBJECT_ID('Dimension.City');
परिणाम:
+------------+---------------------------------------+-------------+------------+ | PK Table | Foreign Key | FK Schema | FK Table | |------------+---------------------------------------+-------------+------------| | City | FK_Fact_Order_City_Key_Dimension_City | Fact | Order | | City | FK_Fact_Sale_City_Key_Dimension_City | Fact | Sale | +------------+---------------------------------------+-------------+------------+
इस मामले में मैं WideWorldImportersDW . का उपयोग कर रहा हूं डेटाबेस, और मैं उन विदेशी कुंजियों को वापस कर रहा हूं जो Dimension.City
. का संदर्भ देती हैं तालिका (Dimension.City
तालिका में प्राथमिक कुंजी कॉलम होता है जिसे विदेशी कुंजी संदर्भित करती है)।
विकल्प 2 - sp_fkeys
किसी विशेष तालिका को संदर्भित करने वाली विदेशी कुंजी प्राप्त करने का दूसरा तरीका sp_fkeys
. का उपयोग करना है सिस्टम संग्रहीत प्रक्रिया। यह संग्रहीत कार्यविधि हमें संदर्भित तालिका, या संदर्भ तालिका के आधार पर (अन्य बातों के अलावा) विदेशी कुंजी प्राप्त करने का विकल्प प्रदान करती है।
इस मामले में हम किसी दी गई तालिका को संदर्भित करने वाली विदेशी कुंजी प्राप्त करने में रुचि रखते हैं, इसलिए हम यह कर सकते हैं:
EXEC sp_fkeys @pktable_name = 'City', @pktable_owner = 'Dimension';
परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
-[ RECORD 1 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDW PKTABLE_OWNER | Dimension PKTABLE_NAME | City PKCOLUMN_NAME | City Key FKTABLE_QUALIFIER | WideWorldImportersDW FKTABLE_OWNER | Fact FKTABLE_NAME | Order FKCOLUMN_NAME | City Key KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Fact_Order_City_Key_Dimension_City PK_NAME | PK_Dimension_City DEFERRABILITY | 7 -[ RECORD 2 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDW PKTABLE_OWNER | Dimension PKTABLE_NAME | City PKCOLUMN_NAME | City Key FKTABLE_QUALIFIER | WideWorldImportersDW FKTABLE_OWNER | Fact FKTABLE_NAME | Sale FKCOLUMN_NAME | City Key KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Fact_Sale_City_Key_Dimension_City PK_NAME | PK_Dimension_City DEFERRABILITY | 7
इसे आसानी से @fktable_name
के साथ पैरामीटर को बदलकर विदेशी कुंजी तालिका के आधार पर विदेशी कुंजी खोजने के लिए आसानी से बदल दिया जा सकता है और @fktable_owner
:
EXEC sp_fkeys @fktable_name = 'Order', @fktable_owner = 'Fact';
एक सही/गलत जांच
यदि आप केवल यह जानना चाहते हैं कि किसी तालिका को विदेशी कुंजी द्वारा संदर्भित किया गया है या नहीं, लेकिन आप इसे सभी सूचीबद्ध नहीं करना चाहते हैं, तो देखें कि क्या तालिका को OBJECTPROPERTY() के साथ SQL सर्वर में किसी विदेशी कुंजी द्वारा संदर्भित किया गया है।पी>
वह लेख TableHasForeignRef
. का उपयोग करता है OBJECTPROPERTY()
. का तर्क 1
return वापस करने के लिए फ़ंक्शन यदि तालिका किसी विदेशी कुंजी द्वारा संदर्भित है, और 0
अगर ऐसा नहीं है।