SQL सर्वर का उपयोग करते समय, यदि आप कभी भी अपने आप को sys.objects
के साथ जुड़ने के बारे में पाते हैं किसी ऑब्जेक्ट का नाम प्राप्त करने के लिए सिस्टम कैटलॉग व्यू, शायद इसे पहले रोकें और पढ़ें।
Transact-SQL में एक बिल्ट-इन फंक्शन होता है जिसे OBJECT_NAME()
. कहा जाता है जो किसी ऑब्जेक्ट का नाम उसकी आईडी के आधार पर लौटाता है।
दूसरे शब्दों में, यदि आपके पास ऑब्जेक्ट की आईडी है (उदाहरण के लिए, object_id
कॉलम), आप बस उस आईडी को OBJECT_NAME()
. पर भेज सकते हैं फ़ंक्शन, और यह आपके लिए ऑब्जेक्ट का नाम वापस कर देगा - इसमें शामिल होने की आवश्यकता नहीं है!
उदाहरण 1 - मूल उपयोग
यह कैसे काम करता है, यह दिखाने के लिए यहां एक बुनियादी उदाहरण दिया गया है।
SELECT name, object_id, OBJECT_NAME(object_id) AS [OBJECT_NAME(object_id)] FROM sys.objects WHERE name = 'Artists';
परिणाम:
+---------+-------------+--------------------------+ | name | object_id | OBJECT_NAME(object_id) | |---------+-------------+--------------------------| | Artists | 885578193 | Artists | +---------+-------------+--------------------------+
यहां, हम देख सकते हैं कि पहले दो कॉलम क्रमशः ऑब्जेक्ट का नाम और आईडी प्रदर्शित करते हैं। तीसरा कॉलम OBJECT_NAME()
. का इस्तेमाल करता है आईडी से नाम वापस करने के लिए कार्य।
यह स्पष्ट रूप से सिर्फ एक उदाहरण है, लेकिन इस मामले में, OBJECT_NAME()
. का उपयोग करके अनावश्यक था क्योंकि sys.objects
पहले से ही वस्तु का नाम लौटाता है।
अगला उदाहरण दिखाता है जहां OBJECT_NAME()
काम आ सकता है।
उदाहरण 2 - एक अधिक उपयोगी उदाहरण
इस उदाहरण में, मैं sys.foreign_keys
को क्वेरी करके किसी विदेशी कुंजी के बारे में जानकारी लौटाता हूं सिस्टम कैटलॉग व्यू।
सबसे पहले, यह देखने के लिए सभी स्तंभों का चयन करें कि इस दृश्य द्वारा क्या लौटाया गया है:
USE Music; SELECT * FROM sys.foreign_keys WHERE name = 'FK_Artists_Country';
परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
name | FK_Artists_Country object_id | 1253579504 principal_id | NULL schema_id | 1 parent_object_id | 885578193 type | F type_desc | FOREIGN_KEY_CONSTRAINT create_date | 2019-08-27 16:14:39.560 modify_date | 2019-08-28 03:28:07.040 is_ms_shipped | 0 is_published | 0 is_schema_published | 0 referenced_object_id | 1205579333 key_index_id | 1 is_disabled | 0 is_not_for_replication | 0 is_not_trusted | 0 delete_referential_action | 0 delete_referential_action_desc | NO_ACTION update_referential_action | 0 update_referential_action_desc | NO_ACTION is_system_named | 0
यह दृश्य विदेशी कुंजी का नाम देता है, लेकिन इसकी मूल वस्तु का नाम नहीं। न ही यह विदेशी कुंजी की संदर्भित वस्तु का नाम लौटाता है। यह केवल उन वस्तुओं की आईडी देता है (अर्थात्, parent_object_id
और referenced_object_id
)।
तो अगर हम इसे केवल उन स्तंभों तक सीमित कर दें, तो हमें कुछ इस तरह मिलेगा:
USE Music; SELECT name, parent_object_id, referenced_object_id FROM sys.foreign_keys WHERE name = 'FK_Artists_Country';
परिणाम:
+--------------------+--------------------+------------------------+ | name | parent_object_id | referenced_object_id | |--------------------+--------------------+------------------------| | FK_Artists_Country | 885578193 | 1205579333 | +--------------------+--------------------+------------------------+
सौभाग्य से, हम अंतिम दो कॉलम OBJECT_NAME()
. को पास कर सकते हैं ऑब्जेक्ट नाम पुनर्प्राप्त करने के लिए।
नाम वापस करने के लिए हम यहां क्या कर सकते हैं।
USE Music; SELECT name AS [Foreign Key], OBJECT_NAME(parent_object_id) AS [Parent Object Name], OBJECT_NAME(referenced_object_id) AS [Referenced Object Name] FROM sys.foreign_keys WHERE name = 'FK_Artists_Country';
परिणाम:
+--------------------+----------------------+--------------------------+ | Foreign Key | Parent Object Name | Referenced Object Name | |--------------------+----------------------+--------------------------| | FK_Artists_Country | Artists | Country | +--------------------+----------------------+--------------------------+
पिछले दो कॉलमों के लिए, मैं प्रासंगिक मानों को OBJECT_NAME()
. पर भेजता हूं कार्य करें ताकि यह प्रत्येक मूल वस्तु का नाम लौटाए।
उदाहरण 3 - WHERE क्लॉज में OBJECT_NAME() का उपयोग करना
यहां OBJECT_NAME()
का उपयोग करने का एक उदाहरण दिया गया है एक WHERE
. में खंड।
SELECT name, object_id, type_desc FROM sys.objects WHERE name = OBJECT_NAME(1253579504);
परिणाम:
+--------------------+-------------+------------------------+ | name | object_id | type_desc | |--------------------+-------------+------------------------| | FK_Artists_Country | 1253579504 | FOREIGN_KEY_CONSTRAINT | +--------------------+-------------+------------------------+
क्रॉस डेटाबेस क्वेरीज़
डिफ़ॉल्ट रूप से, SQL सर्वर मानता है कि ऑब्जेक्ट आईडी वर्तमान डेटाबेस के संदर्भ में है। किसी अन्य डेटाबेस में किसी आईडी को संदर्भित करने वाली क्वेरी NULL या गलत परिणाम देती है।
यदि आपको किसी भिन्न डेटाबेस से ऑब्जेक्ट नाम खोजने की आवश्यकता है, तो आप OBJECT_NAME()
को कॉल करते समय उस डेटाबेस की आईडी को दूसरे तर्क के रूप में प्रदान कर सकते हैं ।
उदाहरण के लिए SQL सर्वर में किसी भिन्न डेटाबेस से OBJECT_NAME () कैसे प्राप्त करें देखें।