博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

Sql 语句的与运算

Posted on 2009-07-30 17:19  ╁蓝驿┲→  阅读(263)  评论(0编辑  收藏  举报

当我们为某个员工设置权限时,发现员工可以属于很多个部门,于是这个员工拥有的权限也将很多。
这时,我们可以考虑用与运算来出来权限的问题。
假定有很多模块,每个模块允许设置使用权限。
模块X1使用权限为权限1,
模块X2使用权限为权限4,
假定统计得出一共存在10个权限。
那么我们设定第一个权限值为1,第二个权限值为2,第三个权限值为4,等等根据二进制的原理进行设置。
如果用户A拥有权限1,权限3,那么他的权限值为5.根据以上原理,模块1的权限值为1,模块2的权限值为8。
那么我们可以使用以下查询语句来检索该用户能够使用的模块。
declare @userrole int
set @userrole = 5
select modulename from t1
where (modulerole &  @userrole) > 0
原理:modulerole &  @userrole使用了位运算,modulerole 和  @userrole值换算成二进制,然后相同的位置的二进制值进行与运算。如果运算结果没有一个匹配的话返回值将是零。
用户A的权限二进制值:0101
模块X1:0001
模块X2:1000
用户               模块X1                    模块X2
用户A             0001                        0000
通过以上原理编写权限值可以节省很多代码和处理时间。