Pergunta

Eu estou tentando executar um bit a bit NÃO no SQL Server. Eu gostaria de fazer algo parecido com isto:

update foo
set Sync = NOT @IsNew

Nota: comecei a escrever este e descobriu a resposta à minha pergunta antes de eu terminar. Eu ainda queria compartilhar com a comunidade, uma vez que este pedaço de documentação que faltava no MSDN (até que eu adicionei-lo para o Conteúdo da Comunidade há, também).

Foi útil?

Solução

Sim, o operador ~ vai funcionar.

update foo
set Sync = ~@IsNew

Outras dicas

Bitwise NÃO: ~

Bitwise E: &

Bitwise OR: |

XOR: ^

Na falta no MSDN? http://msdn.microsoft.com/en-us /library/ms173468(SQL.90).aspx

~: executa uma operação lógica NOT bit a bit em um valor inteiro. Os ~ executa operador bit a bit a bit a bit não é lógico para a expressão, tendo cada bit de cada vez. Se a expressão tem um valor de 0, os bits no conjunto de resultados são o valor 1; caso contrário, o bit no resultado é liberado para um valor de 0. Em outras palavras, aqueles são alterados para zeros e zeros são alterados para queridos.

Por uma questão de exaustividade:

SELECT b, 1 - b
FROM
  (SELECT cast(1 AS BIT) AS b
   UNION ALL
   SELECT cast(0 AS BIT) AS b) sampletable
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top