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

पता करें कि क्या ऑब्जेक्ट OBJECTPROPERTY () के साथ SQL सर्वर में उपयोगकर्ता-परिभाषित तालिका है

आप 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 भी मिलेगा।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एकाधिक स्तंभों के साथ SQL धुरी

  2. SQL सर्वर में एक इनलाइन टेबल-वैल्यूड फंक्शन (ITVF) बनाएं

  3. एसक्यूएल सर्वर में 'एक्सएमएल' आयात करें

  4. SQL सर्वर (T-SQL) में NCHAR () फ़ंक्शन कैसे काम करता है

  5. sql . का उपयोग करके दिनांक फ़ील्ड से महीने के अनुसार समूह कैसे करें