Wie man ein Bitfeld in TSQL verwendet (für Aktualisierungen und Lesevorgänge)
Setzen Sie das Bitfeld beim Start standardmäßig auf 0 (dh keine Änderungen). Sie sollten den Typ int für bis zu 32 Datenbits und bigint für bis zu 64 Datenbits verwenden.
Um ein Bit in einem Bitfeld zu setzen, verwenden Sie den |
(Bit-ODER-Operator) in der Update-Anweisung, zum Beispiel
UPDATE table
SET field1 = 'new value', bitfield = bitfield | 1
UPDATE table
SET field2 = 'new value', bitfield = bitfield | 2
usw. Verwenden Sie für jedes Feld die 2 hoch N-1 für den Wert nach dem |
Um ein Bitfeld zu lesen, verwenden Sie &
(Bit-UND-Operator) und sehen, ob es wahr ist, zum Beispiel
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
Hinweis Ich würde wahrscheinlich keinen Text verwenden, da dies von einer Anwendung verwendet wird, so etwas wird funktionieren
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
oder Sie können !=0 oben verwenden, um es einfach zu machen, wie ich es in meinem Test unten getan habe
Müssen tatsächlich testen, um keine Fehler zu haben, klicken Sie für das Testskript
ursprüngliche Antwort:
Wenn Sie weniger als 16 Spalten in Ihrer Tabelle haben, können Sie die "Flags" als ganze Zahl speichern und dann die Bit-Flag-Methode verwenden, um die geänderten Spalten anzuzeigen. Ignorieren Sie einfach diejenigen, die Sie nicht interessieren, oder markieren Sie sie nicht.
Wenn also Flagfield BOOLEAN AND 2^N wahr ist, zeigt dies an, dass sich das N-te Feld geändert hat.
Oder ein Beispiel für max. N =2
0 - nichts hat sich geändert (alle Bits 0)
1 - Feld 1 geändert (erstes Bit 1)
2 - Feld 2 geändert (zweites Bit 1)
3 - Feld 1+2 geändert (erstes und zweites Bit 1)
siehe diesen Link für eine bessere Definition:http://en.wikipedia.org/wiki/Bit_field