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

SQL सर्वर में विदेशी कुंजियों के साथ सभी तालिकाओं को वापस करने के 7 तरीके

यह आलेख SQL सर्वर में डेटाबेस में विदेशी कुंजियों वाली सभी तालिकाओं को वापस करने के सात तरीके प्रदान करता है।

प्रत्येक तालिका को केवल एक बार लौटाया जाता है, भले ही उसके पास कितनी भी विदेशी कुंजियाँ हों। यह सभी विदेशी कुंजियों को उनकी तालिकाओं के साथ वापस करने के लिए अलग है। यदि आप ऐसा करना चाहते हैं, तो SQL सर्वर में विदेशी कुंजियों को वापस करने के 11 तरीके देखें।

यहां सभी उदाहरण एक ही डेटाबेस से पूछताछ करते हैं, और इसलिए वही परिणाम लौटाते हैं।

विकल्प 1 - OBJECTPROPERTY() sys.tables के साथ

पहला विकल्प OBJECTPROPERTY() . का उपयोग करना है sys.tables . को क्वेरी करते समय कार्य करें सिस्टम दृश्य।

यह फ़ंक्शन एक TableHasForeignKey . को स्वीकार करता है तर्क, जो या तो 1 . होगा या 0 (या NULL ) अगर यह 1 है , इसका मतलब है कि तालिका में एक विदेशी कुंजी है। 0 . का मान इसका मतलब है कि इसमें कोई विदेशी कुंजी नहीं है। इसलिए, हम इसका उपयोग WHERE . में कर सकते हैं केवल उन तालिकाओं को वापस करने के लिए खंड जहां TableHasForeignKey 1 . पर सेट है ।

चुनें SCHEMA_NAME(schema_id) AS [स्कीमा], नाम AS [टेबल] sys.tables से जहां OBJECTPROPERTY(object_id, 'TableHasForeignKey') =1ORDER BY [स्कीमा], [टेबल];

परिणाम:

+----------+------------+| स्कीमा | टेबल ||----------+---------------|| डीबीओ | एल्बम || डीबीओ | कलाकार |+----------+-----------+

विकल्प 2 - OBJECTPROPERTY() INFORMATION_SCHEMA.TABLES के साथ

यह उदाहरण OBJECTPROPERTY() . का उपयोग करता है INFORMATION_SCHEMA.TABLES . को क्वेरी करते समय सिस्टम दृश्य।

 TABLE_SCHEMA, TABLE_NAMEFROM INFORMATION_SCHEMA.TABLE_NAMEFROM OBJECTPROPERTY(OBJECT_ID(CONCAT(TABLE_SCHEMA, '.', TABLE_NAME)),'TableHasForeignKey') =1 ANDTABLE_TYPE'
 परिणाम:

+----------------+--------------+| TABLE_SCHEMA | TABLE_NAME ||--------------+--------------|| डीबीओ | एल्बम || डीबीओ | कलाकार |+----------------+--------------+

विकल्प 3 - OBJECTPROPERTY() sys.objects के साथ

यहां एक और विकल्प है जो OBJECTPROPERTY() . का उपयोग करता है . इस बार मैं इसका उपयोग sys.objects . को क्वेरी करते समय करता हूं सिस्टम दृश्य।

चुनें SCHEMA_NAME(schema_id) AS [स्कीमा], नाम AS [टेबल] sys.objects से जहां टाइप करें ='U'और OBJECTPROPERTY(OBJECT_ID(CONCAT(SCHEMA_NAME(schema_id), '.', name)), 'TableHasForeignKey ') =[स्कीमा], [तालिका] द्वारा 1 आदेश 

परिणाम:

+----------+------------+| स्कीमा | टेबल ||----------+---------------|| डीबीओ | एल्बम || डीबीओ | कलाकार |+----------+-----------+

विकल्प 4 - INFORMATION_SCHEMA.TABLE_CONSTRAINTS DISTINCT के साथ

यहां एक उदाहरण दिया गया है जो INFORMATION_SCHEMA.TABLE_CONSTRAINTS से पूछताछ करता है सिस्टम दृश्य जहां बाधा प्रकार है FOREIGN KEY . इस मामले में, मैं DISTINCT . का भी उपयोग करता हूं एक से अधिक विदेशी कुंजी होने पर तालिकाओं को एक से अधिक बार वापस आने से रोकने के लिए खंड।

 INFORMATION_SCHEMA से DISTINCT CONSTRAINT_SCHEMA, TABLE_NAME चुनें।TABLE_CONSTRAINTSWHERE CONSTRAINT_TYPE ='विदेशी कुंजी';

परिणाम:

+---------------------+--------------+| CONSTRAINT_SCHEMA | TABLE_NAME ||---------------------+--------------|| डीबीओ | एल्बम || डीबीओ | कलाकार |+---------------------+--------------+

अगर मैं DISTINCT . को हटा दूं तो यहां बताया गया है कि क्या होता है खंड:

 INFORMATION_SCHEMA से CONSTRAINT_SCHEMA, TABLE_NAME चुनें।TABLE_CONSTRAINTSWHERE CONSTRAINT_TYPE ='विदेशी कुंजी';

परिणाम:

+---------------------+--------------+| CONSTRAINT_SCHEMA | TABLE_NAME ||---------------------+--------------|| डीबीओ | एल्बम || डीबीओ | एल्बम || डीबीओ | कलाकार |+---------------------+--------------+

इस मामले में Albums तालिका में दो विदेशी कुंजियाँ हैं, और इसलिए मुझे उस एक तालिका के लिए दो पंक्तियाँ मिलती हैं।

विकल्प 5 - sys.forign_keys DISTINCT के साथ

यहां एक और उदाहरण दिया गया है जो DISTINCT . का उपयोग करता है खंड, लेकिन इस बार मैं sys.foreign_keys . को क्वेरी कर रहा हूं सिस्टम दृश्य।

चुनें DISTINCT OBJECT_SCHEMA_NAME(fk.parent_object_id) AS [स्कीमा], OBJECT_NAME(fk.parent_object_id) AS [टेबल]FROM sys.foreign_keys AS fkORDER by [स्कीमा], [टेबल];

परिणाम:

+----------+------------+| स्कीमा | टेबल ||----------+---------------|| डीबीओ | एल्बम || डीबीओ | कलाकार |+----------+-----------+

और यहाँ यह DISTINCT . के बिना है खंड:

चुनें OBJECT_SCHEMA_NAME(fk.parent_object_id) AS [स्कीमा], OBJECT_NAME(fk.parent_object_id) AS [टेबल]FROM sys.foreign_keys AS fkORDER BY [स्कीमा], [टेबल];

परिणाम:

+----------+------------+| स्कीमा | टेबल ||----------+---------------|| डीबीओ | एल्बम || डीबीओ | एल्बम || डीबीओ | कलाकार |+----------+-----------+

विकल्प 6 - ग्रुप बाय के साथ sys.foreign_keys

यह पिछले उदाहरण के समान है जिसमें यह sys.foreign_keys . से पूछताछ करता है सिस्टम दृश्य। अंतर यह है कि, DISTINCT . का उपयोग करने के बजाय खंड, यह GROUP BY . का उपयोग करता है इसके बजाय खंड।

चुनें OBJECT_SCHEMA_NAME(fk.parent_object_id) AS [स्कीमा], OBJECT_NAME(fk.parent_object_id) AS [टेबल]FKGROUP BY OBJECT_SCHEMA_NAME(f.parent_object_id), OBJECT_NAME(fk.parent_object_id) से। 

परिणाम:

+----------+------------+| स्कीमा | टेबल ||----------+---------------|| डीबीओ | एल्बम || डीबीओ | कलाकार |+----------+-----------+

विकल्प 7 - OBJECTPROPERTYEX()

यह उदाहरण पिछले कुछ उदाहरणों पर दोगुना हो सकता है, लेकिन यह अभी भी ध्यान देने योग्य है।

पिछले उदाहरणों में से कोई भी जो OBJECTPROPERTY() . का उपयोग करता है फ़ंक्शन, आसानी से OBJECTPROPERTYEX() . का उपयोग करने के लिए फिर से लिखा जा सकता है समारोह। यह फ़ंक्शन मूल रूप से OBJECTPROPERTY() . का एक्सटेंशन है , और यह सब कुछ करता है OBJECTPROPERTY() करता है और बहुत कुछ।

इसलिए मैं इस पृष्ठ पर निम्नलिखित के साथ पहला उदाहरण फिर से लिख सकता हूं:

चुनें SCHEMA_NAME(schema_id) AS [स्कीमा], नाम AS [टेबल] sys.tables से जहां OBJECTPROPERTYEX(object_id, 'TableHasForeignKey') =1ORDER BY [स्कीमा], [टेबल];

परिणाम:

+----------+------------+| स्कीमा | टेबल ||----------+---------------|| डीबीओ | एल्बम || डीबीओ | कलाकार |+----------+-----------+

आपको एक अंतर के बारे में पता होना चाहिए कि ये दो कार्य अलग-अलग रिटर्न प्रकार लौटाते हैं। OBJECTPROPERTY() एक int . लौटाता है जबकि OBJECTPROPERTYEX() एक sql_variant . लौटाता है टाइप करें।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SSMS के लिए शॉर्टकट कैसे बनाएं और डिफ़ॉल्ट SQL सर्वर से स्वचालित रूप से कनेक्ट करें - SQ:सर्वर / TSQL ट्यूटोरियल भाग 4

  2. यदि अन्य कॉलम रिक्त है तो एक कॉलम का चयन करें

  3. SQL सर्वर प्रबंधन स्टूडियो (SSMS) में टेम्प्लेट का उपयोग कैसे करें - SQL सर्वर / TSQL ट्यूटोरियल भाग 16

  4. SQL सर्वर के साथ जाओ ड्राइवर सफलतापूर्वक कनेक्ट करने में असमर्थ है, लॉगिन विफल

  5. SQL सर्वर 2012/2014 में छिपे हुए प्रदर्शन और प्रबंधनीयता में सुधार