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

जांचें कि क्या तालिका में OBJECTPROPERTY () के साथ SQL सर्वर में टाइमस्टैम्प कॉलम है

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


  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 सर्वर में पारदर्शी डेटा एन्क्रिप्शन (TDE)

  2. एक संग्रहीत प्रक्रिया पैरामीटर सूची में एक अभिव्यक्ति (जैसे फ़ंक्शन कॉल) के परिणाम का उपयोग करना?

  3. SQL सर्वर प्रमाणीकरण डेटाबेस के साथ Linux पर SolarWinds Serv-U का उपयोग करना

  4. SQL सर्वर में क्लस्टर्ड या नॉन-क्लस्टर इंडेक्स का उपयोग कब करें

  5. अरबों पंक्तियों के लिए सर्वश्रेष्ठ डेटा स्टोर