create proc 名
@用户名 Varchar(10),
@权限代码 Varchar(10)
as
if exists(select 1 from [LevGroup] where LevGroup like '%'+@权限代码+'%' and GroupName in (select LevGroup from [Level] where Username=@用户名))
select '有权限'
else
select '没权限'
@用户名 Varchar(10),
@权限代码 Varchar(10)
as
if exists(select 1 from [LevGroup] where LevGroup like '%'+@权限代码+'%' and GroupName in (select LevGroup from [Level] where Username=@用户名))
select '有权限'
else
select '没权限'
如下:我现在认为权限Code 是5位的,
create proc proc_searchright
@UserName char(20),
@RightCode char(5),
@Flag char(1) output --(1代表有权限,0代表没有权限)
as
declare @i int
declare @Start int
declare @end int
declare @rightcode1 char(5)
--Get UserName 所在的组的权限字符串
declare @GroupRightStr char(200)
Select @GroupRightStr =g.LevGroup from LevGroup g
left outer join Level l on l.LevGroup=g.LevGroup
where p.Username=UserName
--开始查看是否有权限 200/5=40
select @i=0
select @Start=0
select @end=0
select @Flag=0while @i<=40
begin
-- 处理字符串了,如果得到和输入的字符串相同的就是由此权限了,如果没有就不行了
select @Start=@i
select @end=@i+5
select @rightcode1 =substring(GroupRightStr,@start,@end)
if @rightcode1 =RightCode
begin
selecct @Flag=1
break
end
else
select @i=@i+5
end
上面的程序是不是有问题呀,如果那样的话是不是。我只是想可能有问题,比如:
权限代码是五位的,回不会有如下的情况那;
11000 00011111111111111
如果它的输入的权限是00000那本来没有他也会查出来有的呀,我不知道是不是正确的,请你指正!!!!!!!!!!!!!!!!!1
我为什么要在组表中以200个位,因为这个字段中的0/1对应的位置与LEV表中的ID号是相应的,
也就是如果在权限表(LEV)中有这样一个权限,它的ID号是2(因为ID号为自动编号),如果一个用户有此权限,那他在这200位的字段中第2位就以1来存储.不知大家有没有明白还有就是一个用户可能存在多个组中,所以最后结果需要做"或"操作,最后再得出结果
HenanBoy(天天学习) -------------- 80分pengdali(大力 V2.0) -------------- 20分