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

来源:http://tech.it168.com/KnowledgeBase/Articles/0/f/5/0f5de3dda843fe41bb8107cdca19c530.htm

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

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

位置   4     3      2      1
 
状态 禁用 显示 重要 保留



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

示例数据库设计

字段名         字段类型           默认值
 
AppObject  varchar(64) 
 
Status         int                   15


Status权限默认值15,表示状态字段中四个位都为1

数据表示例数据

App1     15
 
App2     15
 
App3       7
 
App4       7



使用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


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

 

你可能感兴趣的:(sql,SQL Server,F#,Sybase)