declare @userid varchar(10)
set @userid='1'
if exists(select 1 from tablename where ','+userid+',' like '%,'+@userid+',%')
   print '此用户有权'
else
   print '此用户无权'

解决方案 »

  1.   

    userid字段的数据类型是char还是varchar?
      

  2.   

    --如果是char类型,查询时要注意,这样写不会有遗漏
    if exists(select 1 from tablename where ','+ rtrim(userid) +',' like '%,'+@userid+',%')
    ............
      

  3.   

    不太懂!这样??
    select * from 公文列表 where ','+ rtrim(userid) +',' like '%,'+@userid+',%'
      

  4.   

    將字符串拆分成記錄集,然後單筆關聯。--將@vchString字符串以@vchSplit為分割符分割成記錄集
    -- DROP FUNCTION dbo.FunSplitStringToAraay
    -- SELECT * FROM dbo.FunSplitStringToAraay('28,353,2,35,88',',')
    CREATE FUNCTION dbo.FunSplitStringToAraay(@vchString varchar(1000),@vchSplit varchar(10))
    RETURNS @tabArray table

    string varchar(100)
    )
    AS
    BEGIN
    DECLARE @intStart int 
    DECLARE @intLocation int 
    DECLARE @vchSubstring varchar(100)
    SELECT @intStart =1 
    SELECT @intLocation = CHARINDEX(@vchSplit,@vchString,@intStart) 
    WHILE (@intLocation <>0 ) 
    BEGIN 
    SELECT @vchSubstring=SUBSTRING(@vchString,@intStart,@intLocation-@intStart)
    INSERT INTO @tabArray(string) SELECT @vchSubstring
    SELECT @intStart = @intLocation +1 
    SELECT @intLocation = CHARINDEX(@vchSplit,@vchString,@intStart) 
    END 
    RETURN
    END
      

  5.   

    用LIKE刷选是不是可行,如一条公文发给两个人如:userid=13 和userid=14,在字段中保存的就是"13,14",如果用户userid=1查看发送给他的公文列表,那么上面这条公文是否会出现?
    我的目的是上面的公文不出现在userid=1的列表中,
    progress99(如履薄冰)的存储过程能不能给些解释,刚用SQLSERVER,对存储过程不是很了解
    zb1119(玩命聊):在表结构中设计字段做状态转换是什么意思?
      

  6.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_split]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_split]
    GOif exists (select * from dbo.sysobjects where id = object_id(N'[序数表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [序数表]
    GO--为了效率,所以要一个辅助表配合
    select top 8000 id=identity(int,1,1) into 序数表 
    from syscolumns a,syscolumns b
    alter table 序数表 add constraint pk_id_序数表 primary key(id)
    go/*--字符串分函数 分拆指定分隔符的的字符串,返回结果表--邹建 2004-4--*/
    create function f_split(
    @str varchar(8000), --要分拆的字符串
    @splitchar varchar(10) --分隔符
    )returns table
    as
    return(
    select re=substring(@str,id,charindex(@splitchar,@str+@splitchar,id)-id)
    from 序数表 
    where id<=len(@str)+1 and charindex(@splitchar,@splitchar+@str,id)-id=0
    )
    go--调用
    select * from f_split('asdlkfa,asf as,dd  a,','a,')
      

  7.   

    创建上面的字符串分拆函数,然后在查询时用:select * from 公文列表 a where exists(select 1 from f_split(userid,',')=@userid)
      

  8.   

    --like也是可以的,用这种方式可以避免楼主提出的问题:select * from 公文列表 where ','+ rtrim(userid) +',' like '%,'+@userid+',%'