Jak używać pola bitowego w TSQL (do aktualizacji i odczytów)
Ustaw pole bitowe na domyślną wartość 0 na początku (co oznacza brak zmian), powinieneś użyć typu int dla maksymalnie 32 bitów danych i bigint dla maksymalnie 64 bitów danych.
Aby ustawić bit w polu bitowym, użyj |
(operator bitu OR) w instrukcji aktualizacji, na przykład
UPDATE table
SET field1 = 'new value', bitfield = bitfield | 1
UPDATE table
SET field2 = 'new value', bitfield = bitfield | 2
itd. dla każdego pola użyj liczby od 2 do potęgi N-1 dla wartości po |
Aby odczytać pole bitowe, użyj &
(operator bitu AND) i sprawdź, czy to prawda, na przykład
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
uwaga Prawdopodobnie nie używałbym tekstu, ponieważ będzie on używany przez aplikację, coś takiego będzie działać
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
lub możesz użyć !=0 powyżej, aby uprościć to, co zrobiłem w moim teście poniżej
Musisz faktycznie przetestować, aby nie było błędów, kliknij, aby zobaczyć skrypt testowy
oryginalna odpowiedź:
Jeśli masz mniej niż 16 kolumn w tabeli, możesz przechowywać „flagi” jako liczbę całkowitą, a następnie użyć metody flag bitowych, aby wskazać kolumny, które uległy zmianie. Po prostu zignoruj lub nie zawracaj sobie głowy oznaczaniem tych, na których ci nie zależy.
Zatem jeśli pole flagowe BOOLEAN AND 2^N jest prawdziwe, oznacza to, że zmieniło się N-te pole.
Lub przykład dla max N =2
0 - nic się nie zmieniło (wszystkie bity 0)
1 - pole 1 zmienione (pierwszy bit 1)
2 - pole 2 zmienione (drugi bit 1)
3 - zmieniono pole 1+2 (pierwszy i drugi bit 1)
zobacz ten link, aby uzyskać lepszą definicję:http://en.wikipedia.org/wiki/Bit_field