आप OBJECTPROPERTY()
. का उपयोग कर सकते हैं यह जांचने के लिए SQL सर्वर में कार्य करता है कि कोई ऑब्जेक्ट उपयोगकर्ता द्वारा परिभाषित तालिका है या नहीं।
ऐसा करने के लिए, ऑब्जेक्ट आईडी को पहले तर्क के रूप में पास करें, और IsUserTable
दूसरे तर्क के रूप में। फ़ंक्शन एक 1
देता है या एक 0
इस पर निर्भर करता है कि यह उपयोगकर्ता द्वारा परिभाषित तालिका है या नहीं।
1
. का वापसी मान इसका मतलब है कि यह है एक उपयोगकर्ता-परिभाषित तालिका, और 0
. का मान इसका मतलब है कि ऐसा नहीं है।
उदाहरण 1 - मूल उपयोग
प्रदर्शित करने के लिए यहां एक त्वरित उदाहरण दिया गया है।
WideWorldImportersDW का उपयोग करें;ऑब्जेक्टप्रॉपर्टी चुनें(1013578649, 'IsUserTable') AS [IsUserTable];
परिणाम:
+---------------+| IsUserTable ||---------------|| 1 |+---------------+
इस मामले में, WideWorldImportersDW डेटाबेस में प्रदान की गई आईडी के साथ एक ऑब्जेक्ट है, और यह एक उपयोगकर्ता-परिभाषित तालिका है।
उदाहरण 2 - ऑब्जेक्ट आईडी प्राप्त करना
यदि आप वस्तु का नाम जानते हैं, लेकिन उसकी आईडी नहीं, तो आप OBJECT_ID()
का उपयोग कर सकते हैं आईडी को उसके नाम के आधार पर पुनः प्राप्त करने के लिए कार्य करता है।
उदाहरण:
ऑब्जेक्टप्रॉपर्टी चुनें(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable];
परिणाम:
+---------------+| IsUserTable ||---------------|| 1 |+---------------+
पिछले उदाहरण से यह वही वस्तु है।
यहां यह फिर से अलग से आईडी आउटपुट के साथ है।
चुनें OBJECT_ID('Dimension.City') AS [ऑब्जेक्ट आईडी], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable];
परिणाम:
+--------------+---------------+| ऑब्जेक्ट आईडी | IsUserTable ||---------------+---------------|| 1013578649 | 1 |+---------------+---------------+
उदाहरण 3 - जब ऑब्जेक्ट उपयोगकर्ता-परिभाषित तालिका नहीं है
यहां बताया गया है कि जब ऑब्जेक्ट उपयोगकर्ता तालिका नहीं होता है तो क्या होता है।
ऑब्जेक्टप्रॉपर्टी चुनें(402100473, 'IsUserTable') AS [IsUserTable];
परिणाम:
+---------------+| IsUserTable ||---------------|| 0 |+---------------+
इस मामले में, डेटाबेस करता है उस आईडी के साथ एक वस्तु है, लेकिन वस्तु वास्तव में एक संग्रहीत प्रक्रिया है (उपयोगकर्ता द्वारा परिभाषित तालिका नहीं), इसलिए मुझे एक नकारात्मक परिणाम मिलता है।
यहां यह फिर से OBJECT_ID()
का उपयोग कर रहा है ।
चयन OBJECT_ID('Sequences.ReseedAllSequences') AS [ऑब्जेक्ट आईडी], OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'IsUserTable') AS [IsUserTable], OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'ReseedAllSequences' IsProcedure') AS [IsProcedure];
परिणाम:
+------ | ऑब्जेक्ट आईडी | IsUserTable | प्रक्रिया ||---------------+---------------+---------------|| 402100473 | 0 | 1 |+--------- /पूर्व>मैंने यह देखने के लिए भी जाँच की कि क्या वस्तु एक संग्रहित प्रक्रिया है, और परिणाम सकारात्मक है।
उदाहरण 4 - वस्तु मौजूद नहीं है
SQL सर्वर मानता है कि ऑब्जेक्ट आईडी वर्तमान डेटाबेस संदर्भ में है। यदि आप किसी भिन्न डेटाबेस से ऑब्जेक्ट आईडी पास करते हैं, तो आपको या तो एक पूर्ण परिणाम मिलेगा या आपको गलत परिणाम मिलेंगे।
ऑब्जेक्टप्रॉपर्टी चुनें(OBJECT_ID('InvalidObject'), 'IsUserTable') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsUserTable') AS [12345678];परिणाम:
+---------------------+---------------+| अमान्य वस्तु | 12345678 ||---------------------+---------------|| नल | नल |+---------------------+---------------+इस मामले में डेटाबेस में उस नाम या आईडी की कोई वस्तु नहीं है, और इसलिए मुझे एक पूर्ण परिणाम मिलता है।
त्रुटि होने पर या यदि आपके पास ऑब्जेक्ट देखने की अनुमति नहीं है, तो आपको NULL भी मिलेगा।