Cách sử dụng trường bit trong TSQL (để cập nhật và đọc)
Đặt trường bit thành mặc định là 0 khi bắt đầu (nghĩa là không có thay đổi), bạn nên sử dụng kiểu int cho tối đa 32 bit dữ liệu và bigint cho tối đa 64 bit dữ liệu.
Để đặt một bit trong trường bit, hãy sử dụng |
(toán tử OR bit) trong câu lệnh cập nhật, ví dụ
UPDATE table
SET field1 = 'new value', bitfield = bitfield | 1
UPDATE table
SET field2 = 'new value', bitfield = bitfield | 2
vv cho mỗi trường sử dụng 2 thành lũy thừa của N-1 cho giá trị sau |
Để đọc trường bit, hãy sử dụng &
(toán tử bit AND) và xem nó có đúng không, chẳng hạn
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
lưu ý rằng tôi có thể sẽ không sử dụng văn bản vì văn bản này sẽ được ứng dụng sử dụng, một cái gì đó như thế này sẽ hoạt động
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
hoặc bạn có thể sử dụng! =0 ở trên để làm cho nó đơn giản như tôi đã làm trong thử nghiệm của mình bên dưới
Phải kiểm tra thực tế để không có lỗi, nhấp vào để biết tập lệnh kiểm tra
câu trả lời ban đầu:
Nếu bạn có ít hơn 16 cột trong bảng của mình, bạn có thể lưu trữ "cờ" dưới dạng số nguyên, sau đó sử dụng phương pháp cờ bit để chỉ ra các cột đã thay đổi. Chỉ cần bỏ qua hoặc không bận tâm đánh dấu những cái mà bạn không quan tâm.
Vì vậy, nếu trường cờ BOOLEAN VÀ 2 ^ N là true, nó chỉ ra rằng trường thứ N đã thay đổi.
Hoặc một ví dụ cho tối đa N =2
0 - không có gì thay đổi (tất cả các bit 0)
1 - trường 1 đã thay đổi (bit đầu tiên 1)
2 - trường 2 đã thay đổi (bit thứ hai 1)
3 - trường 1 + 2 đã thay đổi (bit đầu tiên và thứ hai 1)
xem liên kết này để có định nghĩa tốt hơn: http://en.wikipedia.org/wiki/Bit_field