这个SQL语句背后的含义是什么?ISNULL(Status,0) & 128 = 0?

kil*_*man 2 sql sql-server sql-server-2008 sql-server-2008-r2

我的应用程序中的一些存储过程,使用如下WHERE条件:

ISNULL(Status,0) & 128 = 0
Run Code Online (Sandbox Code Playgroud)

它究竟是什么意思或如何比较?isnull条件我明白,但是单&算什么目的,想知道。任何人都可以建议我吗?

Mar*_*tin 5

以下条件:

ISNULL(Status,0) & 128 = 0
Run Code Online (Sandbox Code Playgroud)

评估Status(=128)的第 8 位是否设置。

使用&运算符执行按位AND计算两个值是否共享相同的位。

在上述情况下,您可以将其分解为:

  • Status如果Status是,则使用或 0的值NULL
  • AND用 128按位这个值
  • 如果按位AND返回,则返回 true 0(因此该位未设置)

顺便说一句,如果Status设置了该位,这将返回128而不是0