表usersID    username  level
1      小红       2
2      小明       2
3      小刚       1
4      小张       1
DECLARE @A VARCHAR(max)
SET @A='''小红'',''小明'',''小刚'',''小张'''
SELECT @ADECLARE @Uname VARCHAR(max) 
DECLARE @ID VARCHAR(max) 
SELECT @Uname=ISNULL(@Uname+',','')+RTRIM([username]),
@ID=ISNULL(@ID+',','')+RTRIM([id])
FROM [users]
WHERE [level]=2 AND [username] IN (@A)SELECT @Uname+',',@ID+',' 得到@Uname和@ID
我还要做别的操作!上一个帖子有人给我发了一个解决方案:
DECLARE @idlist varchar(100)
SET @idlist='''a'',''b''''a'',''c'''--拼接并执行动态Transact-SQL语句
EXEC('SELECT * FROM tbname WHERE fdname IN('+@idlist+')')
GO这个不适用我,或者怎么改一下形式就能适用于我的程序了呢?

解决方案 »

  1.   

    DECLARE @A VARCHAR(max)
    SET @A='''小红'',''小明'',''小刚'',''小张'''
    SELECT @ADECLARE @Uname VARCHAR(max) 
    DECLARE @ID VARCHAR(max) 
    SELECT @Uname=ISNULL(@Uname+',','')+RTRIM([username]),
            @ID=ISNULL(@ID+',','')+RTRIM([id])
    FROM [users]
    --用charindex*****************************************
    WHERE [level]=2 AND charindex([username],@A)>0
    --***************************************************
    SELECT @Uname+',',@ID+',' 
      

  2.   

    SELECT @Uname=ISNULL(@Uname+',','')+RTRIM([username]),
            @ID=ISNULL(@ID+',','')+RTRIM([id])
    FROM [users]
    WHERE [level]=2 AND [username] IN ('小红','小明')这样我得到的结果就是
    无列名            无列名
    小红,小明,      1,2,其实就是将in里的东西参数化.用@A代替2楼的用charindex我试了,不行!
      

  3.   

    2楼的可以用了,刚才我在测得时候
    charindex([username],@A)>0
    这块copy过去的,改了一下
    charindex(RTRIM([username]),@A)>0我数据的问题.就是不知道charindex的效率如何