select * from Menu where @role & RoleSet = @role 这个 @role 是一个存储过程参数   RoleSet 是一个字段名我想问一下上面这个查询语句是什么意思  主要是 @role & RoleSet = @role  中的 &  是什么意思

解决方案 »

  1.   

    &(按位 AND)
    在两个整型值之间执行按位逻辑与运算。语法
    expression & expression参数
    expression是任何有效的 Microsoft® SQL Server™ 表达式,必须由整数数据类型分类中的任何数据类型组成。expression 是经过处理并转换为二进制数字以便进行位运算的整型参数。结果类型
    如果输入值为 int,则返回 int;如果输入值为 smallint,则返回 smallint;或者如果输入值为 tinyint,则返回 tinyint。注释
    通过从两个表达式取对应的位,位运算符 & 在两个表达式之间执行按位逻辑与运算。只有当输入表达式中两个位(正在被解析的当前位)的值都为 1 时,结果中的位才被设置为 1;否则,结果中的位被设置为 0。位运算符 & 只可以用在具有整型数据类型分类的表达式上。如果左右表达式的整型数据类型不同(例如,左边 expression 的数据类型是 smallint,右边 expression 的数据类型是 int),那么将较小的数据类型的参数转换为较大的数据类型。在该示例中,数据类型为 smallint 的 expression 被转换为 int 数据类型。
      

  2.   

    还是没理解上面那条SQL语句,能跟我讲解一下吗?   具体是怎么移的,怎么运算的?
      

  3.   

    @role & RoleSet = @role
    说明RoleSet转换成二进制后全部位都是1,
    比如31,转换成二进制是11111,全部位都是1
    全部位是1的十进制数是:2的N次方-1
    所以查询所有RoleSet为2的N次方-1的记录
      

  4.   


    如果照你这么说   9 跟 13 转换成二进制并不都是1啊     我那个条件 写成  8 & RoleSet = 8   这样   RoleSet 里面 所有值为  9 跟 13 的记录都会查出来   
    为啥呢