使用SQL Server中按位于来表示组合状态

本文介绍了一种使用SQL位运算实现权限管理的方法,通过在int字段中设置不同位表示不同状态,利用按位与操作符(&)进行权限检查。这种方法在SQL Server 2000上同样适用,示例展示了如何设计状态字段规则并查询具有特定状态的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以往在做系统权限或状态时,都是不同的字段或一个权限字符串来表示组合权限,前几天在跟税务部门的开发人员共同开发一个系统时,发现他们用一个int字段来表示多个状态,用Sybase的按位于“&”进行检查。于是我回来用SQL Server2000作了一下测试,这种方法在SQL Server上也同样支持。(小弟以前见识少,大虾们如果按位于用得多了,也请不要扔鸡蛋emsmilep.gif

首先我们设计一个按位表示的状态字段规则

位置4321
状态禁用显示重要保留

说明:
位置:是一个字段内的位从右往左的序号
状态:每个位表示的权限,1表示有权限 0表示无权限
保留位用于其它用途,此示例里不使用

示例数据库设计
字段名字段类型默认值
AppObjectvarchar(64)
Statusint15
Status权限默认值15,表示状态字段中四个位都为1

数据表示例数据
App115
App215
App37
App47

使用SQL语句取有相应状态的对象
1、所有启用,启许显示的对象
Select * from AppObjects Where Status&12=12

2、所有启用的对象,对含显示和不显示的对象
Select * from AppObjects Where Status&8=8

3、所有启用,重要但不显示的对象
Select * from AppObjects Where Status&10=10

其它组合依据原理类推。可能有些说不清楚,呵呵,只是写出来让初学者知道有这样一种实现方法。
emsmile.gif

转载于:https://www.cnblogs.com/baoposhou/archive/2007/01/05/612326.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值