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

SQL सर्वर में दी गई तालिका को संदर्भित करने वाली सभी विदेशी कुंजियाँ लौटाएँ

यदि आपको 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 अगर ऐसा नहीं है।


  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 सर्वर सुरक्षा फ़ंक्शन को समझना HAS_Permis_BY_Name और इसके उपयोग के मामले

  2. टी-एसक्यूएल (एसक्यूएल सर्वर) में डुप्लिकेट कुंजी त्रुटि को कैसे अनदेखा करें

  3. पता करें कि क्या ऑब्जेक्ट OBJECTPROPERTY () के साथ SQL सर्वर में उपयोगकर्ता-परिभाषित तालिका है

  4. डेटाबेस के लिए लेनदेन लॉग भरा हुआ है

  5. तालिका नामकरण दुविधा:एकवचन बनाम बहुवचन नाम