2017-03-29 2 views
0

Je veux supprimer un drapeau d'un champs de bits et en même temps, je veux ajouter deux drapeauxBitwise Addition et Soustraction dans une instruction SQL unique

Declare @status int = 3 
SET @status &= ~3 -- this will remove 1 and 2 if exists 
SET @status |= 12 -- this will add 4 and 8 if exists 

Je veux faire les deux ensemble que cela est utilisée dans une instruction de mise à jour comme,

SET @status = (@status | 12) - (CASE WHEN (@status & 2 = 2) THEN 2 ELSE 0 END) - (CASE WHEN (@status & 1 = 1) THEN 1 ELSE 0 END) 

Tout le monde sait comment faire la partie de soustraction à l'aide des opérateurs de bits ainsi qu'une partie d'addition.

Quelque chose comme,

SET @status |= 12 & ~2 --But this doesn't do what I want 

Merci à l'avance.

Répondre

1

Cela ne fonctionne-t-il pas?

SET @status = ((@status & ~3) | 12) 
+0

Oui c'est grâce Gordon – Ash