web-dev-qa-db-fra.com

Comment retourner un peu dans SQL Server?

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é).

66
Even Mien

Oui, l'opérateur ~ fonctionnera.

update foo
set Sync = ~@IsNew
99
Jason Kresowaty

PAS au niveau du bit: ~

ET au niveau du bit: &

OU au niveau du bit: |

XOR au niveau du bit: ^

26
Even Mien

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.

10
Blorgbeard

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
2
Oliver

~ l'opérateur ne fonctionnera qu'avec le BIT,

essayez: ~ CAST (@IsNew AS BIT)

1
vitik