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

SQL सर्वर में क्रॉस-डेटाबेस ऑब्जेक्ट्स पर OBJECT_ID () का उपयोग कैसे करें

OBJECT_ID() . के बीच एक अंतर और OBJECT_NAME() SQL सर्वर में क्रॉस-डेटाबेस क्वेरीज़ के लिए उपयोग किया जाने वाला सिंटैक्स है। इससे मेरा मतलब है, जब उनका उपयोग किसी भिन्न डेटाबेस में ऑब्जेक्ट पर किया जाता है।

OBJECT_NAME() फ़ंक्शन में एक वैकल्पिक तर्क होता है जिसे आप प्रदान कर सकते हैं, जो उस डेटाबेस के डेटाबेस आईडी को निर्दिष्ट करता है जिसमें वह ऑब्जेक्ट होता है जिसका आप नाम प्राप्त करने का प्रयास कर रहे हैं। इस तर्क को प्रदान करने से आप किसी भिन्न डेटाबेस पर किसी ऑब्जेक्ट का नाम प्राप्त कर सकते हैं।

OBJECT_ID() दूसरी ओर, इस तरह के तर्क की आवश्यकता नहीं है। इसके बजाय, यह फ़ंक्शन आपको उस ऑब्जेक्ट के डेटाबेस, स्कीमा और नाम को निर्दिष्ट करने के लिए 3-भाग के नाम का उपयोग करने की अनुमति देता है जिसका आप आईडी प्राप्त करने का प्रयास कर रहे हैं।

इस लेख में OBJECT_ID() . का उपयोग करने के उदाहरण हैं किसी भिन्न डेटाबेस से किसी ऑब्जेक्ट का नाम प्राप्त करने के लिए।

उदाहरण 1 - मूल प्रश्न

यह कैसे काम करता है, यह दिखाने के लिए यहां एक बुनियादी उदाहरण दिया गया है।

USE WideWorldImportersDW;
SELECT OBJECT_ID('Music.dbo.Artists') AS Result;

परिणाम:

+-----------+
| Result    |
|-----------|
| 885578193 |
+-----------+

यहाँ, मैंने WideWorldImportersDW . पर स्विच किया है डेटाबेस, फिर Music . पर किसी ऑब्जेक्ट का नाम पूछा डेटाबेस।

उदाहरण 2 - वर्तमान डेटाबेस की तुलना में

डिफ़ॉल्ट रूप से, SQL सर्वर मानता है कि ऑब्जेक्ट का नाम वर्तमान डेटाबेस के संदर्भ में है। इसलिए यदि आप किसी भिन्न डेटाबेस में किसी ऑब्जेक्ट को निर्दिष्ट करने के लिए 3 भाग के नाम का उपयोग नहीं करते हैं, तो SQL सर्वर डेटाबेस इंजन केवल वर्तमान डेटाबेस में दिखेगा।

यहां पिछले उदाहरण से समान कोड है, इस समय को छोड़कर मैं 1 भाग और 2 भाग नाम शामिल करता हूं। साथ ही, मैं कोड को दो बार चलाता हूं:यह पहली बार Music . में चलाया जाता है डेटाबेस, दूसरी बार इसे WideWorldImportersDW . में चलाया जाता है डेटाबेस:

USE Music;
SELECT 
  OBJECT_ID('Artists') AS [1 Part Name],
  OBJECT_ID('dbo.Artists') AS [2 Part Name],
  OBJECT_ID('Music.dbo.Artists') AS [3 Part Name];

USE WideWorldImportersDW;
SELECT 
  OBJECT_ID('Artists') AS [1 Part Name],
  OBJECT_ID('dbo.Artists') AS [2 Part Name],
  OBJECT_ID('Music.dbo.Artists') AS [3 Part Name];

परिणाम:

Changed database context to 'Music'.
+---------------+---------------+---------------+
| 1 Part Name   | 2 Part Name   | 3 Part Name   |
|---------------+---------------+---------------|
| 885578193     | 885578193     | 885578193     |
+---------------+---------------+---------------+
(1 row affected)
Changed database context to 'WideWorldImportersDW'.
+---------------+---------------+---------------+
| 1 Part Name   | 2 Part Name   | 3 Part Name   |
|---------------+---------------+---------------|
| NULL          | NULL          | 885578193     |
+---------------+---------------+---------------+
(1 row affected)

पहले परिणाम में, तीनों कॉलम सही आईडी लौटाते हैं। ऐसा इसलिए है क्योंकि वर्तमान डेटाबेस Music है , और यहीं पर वस्तु रहती है।

दूसरे परिणाम में, केवल 3 भाग का नाम ही सही वस्तु खोजने में सक्षम है। यह अपेक्षित है, क्योंकि 1 भाग और 2 भाग के नाम डेटाबेस का नाम निर्दिष्ट नहीं करते हैं, इसलिए यह मान लिया जाता है कि ऑब्जेक्ट WideWorldImportersDW में है। (गलत) डेटाबेस।

यदि दोनों डेटाबेस में Artists नामक एक स्कीमा-स्कोप वाली वस्तु होती है तो हमें एक अलग परिणाम मिल सकता है। ऐसे मामलों में, गलती से यह मान लेना आसान होगा कि परिणाम सही है जबकि वास्तव में ऐसा नहीं है।


  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 सर्वर (T-SQL) से ईमेल में क्वेरी परिणाम भेजते समय पैडिंग निकालें

  3. SQL सर्वर 2016 में STRING_SPLIT से स्थिति पर वापसी मान

  4. SQL सर्वर (T-SQL) में विभाजन योजनाओं की सूची लौटाएँ

  5. प्रोएक्टिव SQL सर्वर स्वास्थ्य जांच, भाग 2:रखरखाव