Sådan bruges et bitfelt i TSQL (til opdateringer og læsninger)
Indstil bitfeltet til standard til 0 ved start (det betyder ingen ændringer). Du skal bruge typen int for op til 32 bit data og bigint for op til 64 bit data.
Brug |
for at sætte en bit i et bitfelt (bit OR-operator) i opdateringssætningen, for eksempel
UPDATE table
SET field1 = 'new value', bitfield = bitfield | 1
UPDATE table
SET field2 = 'new value', bitfield = bitfield | 2
osv. for hvert felt, brug 2 til potens af N-1 for værdien efter |
Brug &
for at læse et bitfelt (bit OG operator) og se om det er sandt, for eksempel
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
note jeg ville sandsynligvis ikke bruge tekst, da dette vil blive brugt af en applikation, noget som dette vil fungere
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
eller du kan bruge !=0 ovenfor for at gøre det enkelt, som jeg gjorde i min test nedenfor
originalt svar:
Hvis du har mindre end 16 kolonner i din tabel, kan du gemme "flag" som et heltal og derefter bruge bitflagmetoden til at angive de kolonner, der ændrede sig. Bare ignorer eller lad være med at markere dem, du er ligeglad med.
Så hvis flagfeltet BOOLEAN OG 2^N er sandt, indikerer det, at det N'te felt er ændret.
Eller et eksempel på maks. N =2
0 - intet er ændret (alle bit 0)
1 - felt 1 ændret (første bit 1)
2 - felt 2 ændret (anden bit 1)
3 - felt 1+2 ændret (første og anden bit 1)
se dette link for en bedre definition:http://en.wikipedia.org/wiki/Bit_field