DECLARE @n int,@s varchar(8000)
set Rowcount 16
set @n = 16
SELECT @n=@n-1,@s=CASE WHEN @n<15 THEN @s+N','+QUOTENAME(RTRIM(CAST(id as varchar(8000))),N'''') ELSE N'' END FROM yisheng order by xingming desc
--select @s
SET @s=STUFF(@s,1,1,N'')
--select len(@s)
exec(N'select id,xingming from yisheng  where id in('+@s+N') order by xingming desc')为什么这个语句取不到第一条记录
set Rowcount 0
select id,xingming from yisheng order by xingming desc

解决方案 »

  1.   

    DECLARE @n int,@s varchar(8000)
    set Rowcount 16
    set @s=''
    set @n = 16
    SELECT @n=@n-1,@s=CASE WHEN @n<15 THEN @s+N','+QUOTENAME(RTRIM(CAST(id as varchar(8000))),N'''') ELSE N'' END FROM yisheng order by xingming desc
    --select @s
    SET @s=STUFF(@s,1,1,N'')
    --select len(@s)
    exec(N'select id,xingming from yisheng  where id in('+@s+N') order by xingming desc')为什么这个语句取不到第一条记录
    set Rowcount 0
    select id,xingming from yisheng order by xingming desc
      

  2.   

    --试试给@s 给定初值 set @s=''  or 拼动态sql时 isnull(@s,'')+...
      

  3.   

    DECLARE @n int,@s varchar(8000)
    set Rowcount 16
    set @n = 16
    SELECT @n=@n-1,@s=CASE WHEN @n<15 THEN @s+N','+QUOTENAME(RTRIM(CAST(id as varchar(8000))),N'''') ELSE N'' END FROM yisheng order by xingming desc
    --select @s
    SET @s=STUFF(@s,1,1,N'')
    --select len(@s)
    print'select id,xingming from yisheng  where id in('+@s+N') order by xingmingdesc'
    --print 一下语句内容,看看 
    set Rowcount 0
    select id,xingming from yisheng order by xingming desc
      

  4.   

    set @n = 16
    set @s=''
      

  5.   


    DECLARE @n int,@s varchar(8000)
    set Rowcount 16
    set @n = 16
    SELECT @n=@n-1,@s=CASE WHEN @n<15 THEN @s+N','+QUOTENAME(RTRIM(CAST(id as varchar(8000))),N'''') ELSE N'' END FROM yisheng order by xingming desc
    select @s@s得到的id少了第一个,请高手解答
      

  6.   

    DECLARE @n int,@s varchar(8000)
    set Rowcount 16
    set @n = 16
    SELECT @n=@n-1,@s=CASE WHEN @n<15 THEN @s+N','+QUOTENAME(RTRIM(CAST(id as varchar(8000))),N'''') ELSE N'' END FROM yisheng order by xingming desc
    --select @s
    SET @s=STUFF(@s,1,1,N'')
    --select len(@s)
    exec(N'select id,xingming from yisheng  where id in('+@s+N') order by xingming desc')--这地方是忘加注释了 为什么这个语句取不到第一条记录
    set Rowcount 0
    select id,xingming from yisheng order by xingming desc
      

  7.   

    SELECT @n=@n-1,@s=CASE WHEN @n<15 THEN @s+N','+QUOTENAME(RTRIM(CAST(id as varchar(8000))),N'''') ELSE N'' END FROM yisheng order by xingming desc
    select @s有结果?
      

  8.   

    SELECT @n=@n-1,@s=CASE WHEN @n<15 
    好像是这里第一个@n=15 然后这一行的结果@s='',然后第一个id就没有
      

  9.   


    DECLARE @n int,@s varchar(8000)
    set Rowcount 15
    set @n = 14
    set @s=''
    SELECT @s=CASE WHEN @n<15 THEN @s+N','+QUOTENAME(RTRIM(CAST(id as varchar(8000))),N'''') ELSE N'' END,@n=@n-1 FROM yisheng order by xingming desc
    --select @s
    SET @s=STUFF(@s,1,1,N'')
    --select len(@s)
    exec (N'select id,xingming from yisheng where id in('+@s+N') order by xingming desc')
    select id,xingming from yisheng order by xingming desc这样就能调出来