J'essaie d'effectuer un pas au niveau du bit dans SQL Server. Je voudrais faire quelque chose comme ça:
update foo
set Sync = NOT @IsNew
Remarque: j'ai commencé à écrire ceci et j'ai trouvé la réponse à ma propre question avant de terminer. Je voulais toujours partager avec la communauté, car cette documentation manquait sur MSDN (jusqu'à ce que je l'ajoute également au contenu de la communauté).
Oui, l'opérateur ~ fonctionnera.
update foo
set Sync = ~@IsNew
PAS au niveau du bit: ~
ET au niveau du bit: &
OU au niveau du bit: |
XOR au niveau du bit: ^
Manque sur MSDN? http://msdn.Microsoft.com/en-us/library/ms173468 (SQL.90) .aspx
~: Effectue une opération logique NON au niveau du bit sur une valeur entière. L'opérateur ~ au niveau du bit effectue un NOT logique au niveau du bit pour l'expression, en prenant chaque bit à son tour. Si expression a une valeur de 0, les bits du jeu de résultats sont mis à 1; sinon, le bit du résultat est effacé à une valeur de 0. En d'autres termes, les uns sont changés en zéros et les zéros sont changés en uns.
Par souci d'exhaustivité:
SELECT b, 1 - b
FROM
(SELECT cast(1 AS BIT) AS b
UNION ALL
SELECT cast(0 AS BIT) AS b) sampletable
~ l'opérateur ne fonctionnera qu'avec le BIT,
essayez: ~ CAST (@IsNew AS BIT)