आप OBJECTPROPERTY()
. का उपयोग कर सकते हैं तालिका में टाइमस्टैम्प . है या नहीं, यह जांचने के लिए SQL सर्वर में कार्य करता है कॉलम।
ऐसा करने के लिए, तालिका के ऑब्जेक्ट आईडी को पहले तर्क के रूप में पास करें, और TableHasTimestamp
दूसरे तर्क के रूप में। फ़ंक्शन एक 1
देता है या एक 0
इस पर निर्भर करता है कि इसमें टाइमस्टैम्प . है या नहीं कॉलम।
1
. का वापसी मान इसका मतलब है कि तालिका करती है एक टाइमस्टैम्प . है कॉलम, और 0
. का मान इसका मतलब यह नहीं है।
यह उन स्तंभों के लिए भी काम करता है जिन्हें पंक्ति संस्करण . के रूप में परिभाषित किया गया है (टाइमस्टैम्प पंक्ति संस्करण . का पदावनत समानार्थी है )
उदाहरण 1 - टाइमस्टैम्प कॉलम
टाइमस्टैम्प . के साथ तालिका पर प्रदर्शित करने के लिए यहां एक त्वरित उदाहरण दिया गया है कॉलम।
USE Test_timestamp; SELECT OBJECTPROPERTY(OBJECT_ID('Pet'), 'TableHasTimestamp') AS [TableHasTimestamp];
परिणाम:
+---------------------+ | TableHasTimestamp | |---------------------| | 1 | +---------------------+
इस मामले में, Test_timestamp डेटाबेस में प्रदान की गई आईडी के साथ एक तालिका है, और इसमें एक टाइमस्टैम्प . है कॉलम।
मैं OBJECT_ID()
का उपयोग करता हूं इसके नाम के आधार पर तालिका की आईडी को पुनः प्राप्त करने के लिए कार्य करता है।
उदाहरण 2 - एक पंक्ति संस्करण स्तंभ
जैसा कि उल्लेख किया गया है, यह विधि तब भी काम करती है जब आपने पंक्ति संस्करण . का उपयोग किया हो कॉलम को परिभाषित करने के लिए।
उदाहरण के लिए, यदि मैं निम्न प्रकार से एक तालिका बनाता हूं:
CREATE TABLE Owner ( OwnerId int PRIMARY KEY, OwnerName varchar(255), RowVersion rowversion );
और फिर उस पर एक चेक चलाएँ:
SELECT OBJECTPROPERTY(OBJECT_ID('Owner'), 'TableHasTimestamp') AS [TableHasTimestamp];
परिणाम:
+---------------------+ | TableHasTimestamp | |---------------------| | 1 | +---------------------+
मैंने देखा है कि, हालांकि माइक्रोसॉफ्ट के दस्तावेज में कहा गया है कि टाइमस्टैम्प पंक्ति संस्करण . का समानार्थी है , इस लेखन के समय, पंक्ति संस्करण . के रूप में एक स्तंभ बनाना मेरे SQL सर्वर 2017 सिस्टम पर वास्तव में इसे टाइमस्टैम्प . के रूप में प्रदर्शित करता है कॉलम। यदि मैं कॉलम बनने के बाद के प्रकार को देखता हूं, तो यह टाइमस्टैम्प कॉलम के रूप में प्रदर्शित होता है।
SELECT OBJECT_NAME(object_id) AS [Table], name AS [Column], TYPE_NAME(system_type_id) AS [Type] FROM sys.columns WHERE OBJECT_NAME(object_id) = 'Owner';
परिणाम:
+---------+------------+-----------+ | Table | Column | Type | |---------+------------+-----------| | Owner | OwnerId | int | | Owner | OwnerName | varchar | | Owner | RowVersion | timestamp | +---------+------------+-----------+
उदाहरण 3 - बिना टाइमस्टैम्प कॉलम वाली टेबल
तालिका में टाइमस्टैम्प . न होने पर यहां क्या होता है कॉलम।
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasTimestamp') AS [TableHasTimestamp];
परिणाम:
+---------------------+ | TableHasTimestamp | |---------------------| | 0 | +---------------------+
इस मामले में, ऑब्जेक्ट एक टेबल है, लेकिन इसमें टाइमस्टैम्प . नहीं है कॉलम।
उदाहरण 4 - जब वस्तु एक तालिका नहीं है
यहां बताया गया है कि क्या होता है जब डेटाबेस में आईडी के साथ कोई ऑब्जेक्ट होता है, लेकिन वह ऑब्जेक्ट एक टेबल भी नहीं होता है।
SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasTimestamp') AS [TableHasTimestamp];
परिणाम:
+---------------------+ | TableHasTimestamp | |---------------------| | NULL | +---------------------+
उदाहरण 5 - वस्तु मौजूद नहीं है
SQL सर्वर मानता है कि ऑब्जेक्ट आईडी वर्तमान डेटाबेस संदर्भ में है। यदि आप किसी भिन्न डेटाबेस से ऑब्जेक्ट आईडी पास करते हैं, तो आपको या तो एक पूर्ण परिणाम मिलेगा या आपको गलत परिणाम मिलेंगे।
SELECT OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasTimestamp') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasTimestamp') AS [12345678];
परिणाम:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
इस मामले में डेटाबेस में उस नाम या आईडी की कोई वस्तु नहीं है, और इसलिए मुझे एक पूर्ण परिणाम मिलता है।
त्रुटि होने पर या यदि आपके पास ऑब्जेक्ट देखने की अनुमति नहीं है, तो आपको NULL भी मिलेगा।