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

इतिहास को बनाए बिना परिवर्तित क्षेत्रों को ट्रैक करना

TSQL में बिटफ़ील्ड का उपयोग कैसे करें (अपडेट और पढ़ने के लिए)

बिटफ़ील्ड को प्रारंभ में डिफ़ॉल्ट रूप से 0 पर सेट करें (अर्थात् कोई परिवर्तन नहीं) आपको 32 बिट डेटा के लिए टाइप int और 64 बिट डेटा के लिए bigint का उपयोग करना चाहिए।

थोड़ा सा क्षेत्र में सेट करने के लिए | . का उपयोग करें (बिट या ऑपरेटर) अपडेट स्टेटमेंट में, उदाहरण के लिए

UPDATE table 
SET field1 = 'new value', bitfield = bitfield | 1

UPDATE table 
SET field2 = 'new value', bitfield = bitfield | 2

आदि प्रत्येक फ़ील्ड के लिए | . के बाद मान के लिए N-1 की शक्ति के लिए 2 का उपयोग करें

थोड़ा सा फ़ील्ड पढ़ने के लिए & . का उपयोग करें (बिट और ऑपरेटर) और देखें कि क्या यह सच है, उदाहरण के लिए

SELECT field1, field2,
       CASE WHEN (bitfield & 1) = 1 THEN 'field1 mod' ELSE 'field1 same' END,
       CASE WHEN (bitfield & 2) = 2 THEN 'field2 mod' ELSE 'field2 same' END
FROM table

ध्यान दें कि मैं शायद टेक्स्ट का उपयोग नहीं करूंगा क्योंकि इसका उपयोग किसी एप्लिकेशन द्वारा किया जाएगा, ऐसा कुछ काम करेगा

SELECT field1, field2,
        CASE WHEN (bitfield & 1) = 1 THEN 1 ELSE 0 END AS [field1flag],
        CASE WHEN (bitfield & 2) = 2 THEN 1 ELSE 0 END AS [field2flag]
FROM table

या आप इसे सरल बनाने के लिए ऊपर !=0 का उपयोग कर सकते हैं जैसा कि मैंने नीचे अपने परीक्षण में किया था

त्रुटि न होने के लिए वास्तव में परीक्षण करना है, परीक्षण स्क्रिप्ट के लिए क्लिक करें

मूल उत्तर:

यदि आपकी तालिका में 16 से कम कॉलम हैं तो आप "झंडे" को एक पूर्णांक के रूप में संग्रहीत कर सकते हैं, फिर बदले गए कॉलम को इंगित करने के लिए बिट ध्वज विधि का उपयोग करें। बस उन पर ध्यान न दें या उन्हें चिह्नित करने से परेशान न हों जिनकी आपको परवाह नहीं है।

इस प्रकार यदि फ्लैगफील्ड बूलियन और 2^एन सत्य है तो यह इंगित करता है कि एनएच फ़ील्ड बदल गया है।

या अधिकतम N =2

. के लिए एक उदाहरण

0 - कुछ भी नहीं बदला है (सभी बिट्स 0)

1 - फ़ील्ड 1 परिवर्तित (पहला बिट 1)

2 - फ़ील्ड 2 परिवर्तित (दूसरा बिट 1)

3 - फ़ील्ड 1+2 परिवर्तित (पहला और दूसरा बिट 1)

बेहतर परिभाषा के लिए यह लिंक देखें:http://en.wikipedia.org/wiki/Bit_field ए>



  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 सर्वर एजेंट जॉब (T-SQL) में जॉब स्टेप जोड़ें

  3. MS SQL 2012 में पूर्ण पाठ खोज का उपयोग करके किसी विशिष्ट पाठ को फ़िल्टर करके पंक्तियों को कैसे खोजें?

  4. SQL सर्वर 2005 में संकुल अनुक्रमणिका न होने के कारण

  5. पैरामीटरयुक्त क्वेरी उस पैरामीटर की अपेक्षा करती है जो आपूर्ति नहीं की गई थी