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
नामक एक स्कीमा-स्कोप वाली वस्तु होती है तो हमें एक अलग परिणाम मिल सकता है। ऐसे मामलों में, गलती से यह मान लेना आसान होगा कि परिणाम सही है जबकि वास्तव में ऐसा नहीं है।