sql >> Database teknologi >  >> RDS >> Sqlserver

Sporing af ændrede felter uden at vedligeholde historik

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

Du skal faktisk teste

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



  1. Postgresql - Ren måde at indsætte poster på, hvis de ikke eksisterer, opdater, hvis de gør

  2. Tablespaces i Oracle

  3. Postgres 9.4 hænger under forfriskende materialiseret visning

  4. ORA-03113:slutningen af ​​filen på kommunikationskanalen efter lang tids inaktivitet i ASP.Net-appen