यदि आपको कभी भी SQL सर्वर में प्राथमिक कुंजी वाली सभी तालिकाओं को खोजने की आवश्यकता होती है, तो यह आलेख मदद कर सकता है।
यह आलेख प्राथमिक कुंजी वाले मौजूदा डेटाबेस में सभी तालिकाओं को वापस करने के सात तरीके प्रदान करता है।
ध्यान दें कि इनमें से अधिकतर उदाहरण केवल टेबल लौटाते हैं - प्राथमिक कुंजी स्वयं नहीं। यदि आप प्राथमिक कुंजियों की सूची चाहते हैं, तो SQL सर्वर में प्राथमिक कुंजी वापस करने के 11 तरीके देखें।
विकल्प 1 - OBJECTPROPERTY() sys.tables के साथ
पहले विकल्प में OBJECTPROPERTY()
. का उपयोग करना शामिल है sys.tables
. को क्वेरी करते समय कार्य करें सिस्टम दृश्य। यह फ़ंक्शन एक TableHasPrimaryKey
को स्वीकार करता है बहस। यदि इस तर्क का मान 1
. है , हमें सभी टेबल मिलते हैं जिनमें प्राथमिक कुंजी होती है (यदि यह 0
. है तब हमें वे सभी टेबल मिलते हैं जिनमें प्राथमिक कुंजी नहीं होती है)।
चुनें SCHEMA_NAME(schema_id) AS [स्कीमा], नाम AS [टेबल] sys.tables से जहां OBJECTPROPERTY(object_id, 'TableHasPrimaryKey') =1ORDER BY [स्कीमा], [टेबल];
परिणाम:
+----------+------------+| स्कीमा | टेबल ||----------+---------------|| डीबीओ | एल्बम || डीबीओ | कलाकार || डीबीओ | देश || डीबीओ | शैलियां |+----------+------------+
इस उदाहरण में, वर्तमान डेटाबेस में प्राथमिक कुंजी के साथ चार टेबल हैं।
शेष उदाहरण समान डेटाबेस को क्वेरी करेंगे, इसलिए उन प्रश्नों के परिणाम समान होंगे।
विकल्प 2 - OBJECTPROPERTY() INFORMATION_SCHEMA.TABLES के साथ
यह उदाहरण OBJECTPROPERTY()
. का उपयोग करता है फिर से, लेकिन इस बार मैं INFORMATION_SCHEMA.TABLES
से पूछताछ कर रहा हूं देखें।
TABLE_SCHEMA, TABLE_NAMEFROM INFORMATION_SCHEMA.TABLESWHERE OBJECTPROPERTY(OBJECT_ID(CONCAT(TABLE_SCHEMA, '.', TABLE_NAME)),'TableHasPrimaryKey') =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)), 'TableHasPrimaryKey ') =[स्कीमा], [तालिका] द्वारा 1 आदेशपरिणाम:
+----------+------------+| स्कीमा | टेबल ||----------+---------------|| डीबीओ | एल्बम || डीबीओ | कलाकार || डीबीओ | देश || डीबीओ | शैलियां |+----------+------------+विकल्प 4 - INFORMATION_SCHEMA.TABLE_CONSTRAINTS
आप
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
को क्वेरी कर सकते हैं प्राथमिक कुंजी के साथ तालिकाओं की सूची प्राप्त करने के लिए देखें। आपको परिणामों को केवल उन्हीं पंक्तियों में फ़िल्टर करने की आवश्यकता है जिनमेंCONSTRAINT_TYPE
. हैPRIMARY KEY
. का ।CONSTRAINT_SCHEMA, TABLE_NAMEFROM INFORMATION_SCHEMA.TABLE_CONSTRAINTSWHERE CONSTRAINT_TYPE ='प्राथमिक कुंजी' चुनें;परिणाम:
+---------------------+--------------+| CONSTRAINT_SCHEMA | TABLE_NAME ||---------------------+--------------|| डीबीओ | कलाकार || डीबीओ | शैलियों || डीबीओ | एल्बम || डीबीओ | देश |+---------------------+--------------+यह दृश्य बाधा नाम भी लौटाता है, इसलिए यदि आवश्यक हो तो आप उस कॉलम को भी शामिल कर सकते हैं:
CONSTRAINT_SCHEMA, TABLE_NAME, CONSTRAINT_NAMEFROM INFORMATION_SCHEMA.TABLE_CONSTRAINTSWHERE CONSTRAINT_TYPE ='प्राथमिक कुंजी' चुनें;परिणाम:
+---------------------+--------------+---------- -----------------------+| CONSTRAINT_SCHEMA | TABLE_NAME | CONSTRAINT_NAME ||---------------------+--------------+---------- ---------------------|| डीबीओ | कलाकार | PK__कलाकार__25706B50FCD918B1 || डीबीओ | शैलियों | PK__Genres__0385057E88BB96F8 || डीबीओ | एल्बम | PK__एल्बम__97B4BE379FC780BD || डीबीओ | देश | PK__देश__10D1609F97ADEC31 |+---------------------+--------------+---------- ---------------------+विकल्प 5 - sys.key_constraints
आप
sys.key_constraints
. को फ़िल्टर कर सकते हैं एकCONSTRAINT_TYPE
देखेंPK
. का प्राथमिक कुंजियों वाली तालिकाओं की सूची प्राप्त करने के लिए।चुनें SCHEMA_NAME(schema_id) AS [स्कीमा], OBJECT_NAME(parent_object_id) AS [टेबल]FROM sys.key_constraints WHERE type ='PK';परिणाम:
+----------+------------+| स्कीमा | टेबल ||----------+---------------|| डीबीओ | कलाकार || डीबीओ | शैलियों || डीबीओ | एल्बम || डीबीओ | देश |+----------+-----------+यहाँ यह फिर से प्राथमिक कुंजी नाम के साथ है:
चुनें SCHEMA_NAME(schema_id) AS [स्कीमा], OBJECT_NAME(parent_object_id) AS [टेबल], nameFROM sys.key_constraints WHERE type ='PK';परिणाम:
+----------+---------------+-------------------------- ------+| स्कीमा | टेबल | नाम ||----------+---------------+-------------------------- -----|| डीबीओ | कलाकार | PK__कलाकार__25706B50FCD918B1 || डीबीओ | शैलियों | PK__Genres__0385057E88BB96F8 || डीबीओ | एल्बम | PK__एल्बम__97B4BE379FC780BD || डीबीओ | देश | PK__देश__10D1609F97ADEC31 |+----------+---------+--------------- -----+विकल्प 6 - sys.objects
sys.objects
सिस्टम व्यू प्राथमिक कुंजी सहित स्कीमा-स्कोप्ड ऑब्जेक्ट्स के बारे में जानकारी वापस करने के लिए लोकप्रिय है।चुनें SCHEMA_NAME(schema_id) AS [स्कीमा], OBJECT_NAME(parent_object_id) AS [टेबल]FROM sys.objects WHERE type ='PK';परिणाम:
+----------+------------+| स्कीमा | टेबल ||----------+---------------|| डीबीओ | कलाकार || डीबीओ | शैलियों || डीबीओ | एल्बम || डीबीओ | देश |+----------+-----------+पिछले दो उदाहरणों की तरह, हम
name
. को शामिल कर सकते हैं प्राथमिक कुंजी का नाम प्रदर्शित करने के लिए इस दृश्य का स्तंभ:चुनें SCHEMA_NAME(schema_id) AS [स्कीमा], OBJECT_NAME(parent_object_id) AS [टेबल], nameFROM sys.objects WHERE type ='PK';परिणाम:
+----------+---------------+-------------------------- ------+| स्कीमा | टेबल | नाम ||----------+---------------+-------------------------- -----|| डीबीओ | कलाकार | PK__कलाकार__25706B50FCD918B1 || डीबीओ | शैलियों | PK__Genres__0385057E88BB96F8 || डीबीओ | एल्बम | PK__एल्बम__97B4BE379FC780BD || डीबीओ | देश | PK__देश__10D1609F97ADEC31 |+----------+---------+--------------- -----+विकल्प 7 - OBJECTPROPERTYEX()
OBJECTPROPERTYEX()
फ़ंक्शन बिल्कुलOBJECTPROPERTY()
. की तरह काम करता है फ़ंक्शन, सिवाय इसके कि यह अधिक गुणों का समर्थन करता है। इसलिए, पिछले उदाहरणों में से कोई भी जोOBJECTPROPERTY()
. का उपयोग करता है , आसानी सेOBJECTPROPERTYEX()
. का उपयोग करने के लिए फिर से लिखा जा सकता है ।उदाहरण के लिए, मैं इस पृष्ठ पर निम्नलिखित के लिए पहला उदाहरण फिर से लिख सकता हूं:
चुनें SCHEMA_NAME(schema_id) AS [स्कीमा], नाम AS [टेबल] sys.tables से जहां OBJECTPROPERTYEX(object_id, 'TableHasPrimaryKey') =1ORDER BY [स्कीमा], [टेबल];परिणाम:
+----------+------------+| स्कीमा | टेबल ||----------+---------------|| डीबीओ | एल्बम || डीबीओ | कलाकार || डीबीओ | देश || डीबीओ | शैलियां |+----------+------------+मुझे यह उल्लेख करना चाहिए कि
OBJECTPROPERTYEX()
एक sql_variant . लौटाता है डेटा प्रकार, जबकिOBJECTPROPERTY()
एक int . लौटाता है ।