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

SQL सर्वर में ऑब्जेक्ट का नाम उसके ऑब्जेक्ट_आईडी से प्राप्त करने के लिए OBJECT_NAME() का उपयोग करें

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 () कैसे प्राप्त करें देखें।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक दृश्य में संग्रहीत प्रक्रिया को कैसे कॉल करें?

  2. SQL सर्वर में स्ट्रिंग को दिनांक/समय मान में कनवर्ट करने के 6 तरीके

  3. SQL सर्वर उच्च उपलब्धता:मौजूदा फ़ेलओवर क्लस्टर इंस्टेंस में नई डिस्क जोड़ें

  4. SQL सर्वर में फ़ंक्शन-आधारित अनुक्रमणिका

  5. कई इंडेक्स वाली टेबल के लिए स्लो बल्क इंसर्ट