Comment utiliser un champ de bits dans TSQL (pour les mises à jour et les lectures)
Définissez le champ de bits par défaut sur 0 au démarrage (ce qui signifie aucun changement), vous devez utiliser le type int pour jusqu'à 32 bits de données et bigint pour jusqu'à 64 bits de données.
Pour définir un bit dans un champ de bit, utilisez le |
(opérateur bit OR) dans l'instruction de mise à jour, par exemple
UPDATE table
SET field1 = 'new value', bitfield = bitfield | 1
UPDATE table
SET field2 = 'new value', bitfield = bitfield | 2
etc pour chaque champ utiliser le 2 à la puissance de N-1 pour la valeur après le |
Pour lire un champ de bits, utilisez &
(bit ET opérateur) et voir si c'est vrai, par exemple
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 que je n'utiliserais probablement pas de texte car cela sera utilisé par une application, quelque chose comme ça fonctionnera
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
ou vous pouvez utiliser !=0 ci-dessus pour le rendre simple comme je l'ai fait dans mon test ci-dessous
Doivent réellement tester pour ne pas avoir d'erreurs, cliquez pour le script de test
réponse originale :
Si vous avez moins de 16 colonnes dans votre table, vous pouvez stocker les "indicateurs" sous forme d'entier, puis utiliser la méthode des indicateurs binaires pour indiquer les colonnes qui ont changé. Ignorez simplement ou ne vous embêtez pas à marquer ceux qui ne vous intéressent pas.
Ainsi, si flagfield BOOLEAN AND 2^N est vrai, cela indique que le Nième champ a changé.
Ou un exemple pour max de N =2
0 - rien n'a changé (tous les bits à 0)
1 - champ 1 modifié (premier bit 1)
2 - champ 2 modifié (deuxième bit 1)
3 - champ 1+2 modifié (premier et deuxième bit 1)
voir ce lien pour une meilleure définition :http://en.wikipedia.org/wiki/Bit_field