Operador e comercial (&) em uma cláusula WHERE do SQL Server

Desculpe pela pergunta básica. O que o operador & faz neste SQL

 WHERE (sc.Attributes & 1) = 0 

sc é um alias para uma tabela que contém attributes coluna.

Eu estou tentando entender um pouco de SQL em um relatório e essa linha está fazendo com que ele retorne 0 inputs. Se eu comentar, funciona. Tenho conhecimento limitado de SQL e não tenho certeza do que o & 1 está fazendo.

& é o operador lógico e bit a bit – Ele executa a operação em 2 valores inteiros.

 WHERE (sc.Attributes & 1) = 0 

O código acima verifica se sc.Attributes é um número par. Qual é o mesmo que dizer que o primeiro bit não está definido.

Por causa do nome da coluna: “Atributos”, o valor “1” provavelmente é apenas um sinalizador que possui algum significado externo.

É comum usar 1 dígito binário para cada sinalizador armazenado em um número para atributos. Então, para testar o primeiro bit você usa sc.Attributes & 1, para testar o segundo que você usa sc.Attributes & 2, para testar o terceiro você usa sc.Attributes & 4, para testar o quarto você usa sc.Attributes & 8, …

A parte = 0 está testando para ver se o primeiro bit NÃO está definido.

Alguns exemplos binários: (== para mostrar o resultado da operação)

 //Check if the first bit is set, same as sc.Attributes&1 11111111 & 00000001 == 1 11111110 & 00000001 == 0 00000001 & 00000001 == 1 //Check if the third bit is set, same as sc.Attributes&4 11111111 & 00000100 == 1 11111011 & 00000100 == 0 00000100 & 00000100 == 1 

É um bit a bit e .

É um operador E lógico bit a bit .

Vendo como você marcou isso como servidor sql, eu pensei em adicionar algo de um ângulo diferente, como também corri para um deles esta semana.

Isso pode prejudicar o desempenho de suas consultas, se usado no predicado. Muito fácil de fabricar um exemplo de sua preferência. Aqui está o trecho da minha consulta

 WHERE advertiserid = @advertiserid AND (is_deleted & @dirty > 0) WHERE advertiserid = @advertiserid AND (is_deleted > 0 AND @dirty > 0) 

simplesmente definindo cada coluna com um valor adequado, isso permitiu que o otimizador removesse uma pesquisa de favoritos e as statistics de desempenho mostrassem um aumento no desempenho do X10.