exec('select *,'+@s+' from v a ' + @w + '  group by stcode,year ')

解决方案 »

  1.   

    直接追加就行了啊
    但是不要超过长度限制就可以select @s=@s+',['+convert(varchar(10),itemname)+']=max(case item when '''+convert(varchar(10),item)+''' then k else 0 end)' from (select distinct item,itemname from v' + @w + ') a'
      

  2.   

    你用一个varchar(8000)的变量保存不就行了
      

  3.   

    CREATE PROCEDURE proc_lkfcpeMo1 @w varchar(8000) as
    --处理
    declare @s varchar(8000
    set @s=''
    select @s=@s+',['+convert(varchar(10),itemname)+']=max(case item when '''+convert(varchar(10),item)+''' then k else 0 end)' from (select distinct item,itemname from v) aexec('select *,'+@s+' from v a where '+@w+'  group by stcode,year)
    GO
      

  4.   

    --上面的还要改一下:CREATE PROCEDURE proc_lkfcpeMo1 
    @w varchar(8000)
    as
    --处理
    declare @s varchar(8000),@qry nvarchar(4000)
    select @w=case isnull(@w,'') when '' then ''
    else case left(@w,6) when 'where ' then @w
    else 'where '+@w end end
    ,@s=''
    ,@qry='
    select @s=@s+'',[''+convert(varchar(10),itemname)
    +'']=max(case item when ''''''
    +convert(varchar(10),item)+'''''' then k else 0 end)''
    from (select distinct item,itemname from v '+@w+' ) a'
    exec sp_executesql @qry,N'@s varchar(8000) out',@s out
    exec('select *'+@s+' from v a '+@w+'  group by stcode,year')
    GO