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 '没权限'

解决方案 »

  1.   

    请问一下你的要传入的参数,username 是唯一的吗?如果不是的话我看传Id好算了我想应该是可以的如果你的权限代码是有一点的规则的,如果没有规则,我就不敢肯定了比如是权限代码是5位的,还是几位的,这样就可以找达到的。
    如下:我现在认为权限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
      

  2.   

    pengdali(大力 V2.0)
    上面的程序是不是有问题呀,如果那样的话是不是。我只是想可能有问题,比如:
    权限代码是五位的,回不会有如下的情况那;
    11000 00011111111111111
    如果它的输入的权限是00000那本来没有他也会查出来有的呀,我不知道是不是正确的,请你指正!!!!!!!!!!!!!!!!!1
      

  3.   

    本来是想结帖的,可是好像还是有问题,还请赐教,谢谢!我的权限在组(LevGroup)中是以 0 和 1 来存储的,然后在 权限表(LEV)中是以代码来存储,
    我为什么要在组表中以200个位,因为这个字段中的0/1对应的位置与LEV表中的ID号是相应的,
    也就是如果在权限表(LEV)中有这样一个权限,它的ID号是2(因为ID号为自动编号),如果一个用户有此权限,那他在这200位的字段中第2位就以1来存储.不知大家有没有明白还有就是一个用户可能存在多个组中,所以最后结果需要做"或"操作,最后再得出结果
      

  4.   

    最后得分情况
    HenanBoy(天天学习)      --------------   80分pengdali(大力 V2.0)     --------------   20分