Jak používat bitové pole v TSQL (pro aktualizace a čtení)
Nastavte bitfield na výchozí hodnotu 0 na začátku (to znamená žádné změny), měli byste použít typ int pro až 32 bitů dat a bigint pro až 64 bitů dat.
Chcete-li nastavit bit v bitovém poli, použijte |
(operátor bit OR) v příkazu aktualizace, například
UPDATE table
SET field1 = 'new value', bitfield = bitfield | 1
UPDATE table
SET field2 = 'new value', bitfield = bitfield | 2
atd. pro každé pole použijte 2 až mocninu N-1 pro hodnotu za |
Pro čtení bitového pole použijte &
(operátor bit AND) a podívejte se, zda je to pravda, například
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
poznámka Pravděpodobně bych nepoužil text, protože jej bude používat aplikace, něco takového bude fungovat
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
nebo můžete použít !=0 výše, abyste to zjednodušili, jako jsem to udělal v níže uvedeném testu
Aby test neměl chyby, musíte kliknout na test>
původní odpověď:
Pokud máte v tabulce méně než 16 sloupců, můžete uložit „vlajky“ jako celé číslo a poté použít metodu bitového příznaku k označení sloupců, které se změnily. Prostě ignorujte nebo se neobtěžujte označovat ty, které vás nezajímají.
Pokud je tedy příznakové pole BOOLEAN AND 2^N pravdivé, znamená to, že se N-té pole změnilo.
Nebo příklad pro max. N =2
0 - nic se nezměnilo (všechny bity 0)
1 - pole 1 změněno (první bit 1)
2 - pole 2 změněno (druhý bit 1)
3 - pole 1+2 změněno (první a druhý bit 1)
pro lepší definici viz tento odkaz:http://en.wikipedia.org/wiki/Bit_field