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 ए>