declare @sql nvarchar(4000)
                        set @sql=''
                        select @sql=@sql+',['+InvModel+']=sum(case InvModel  when '''+InvModel+''' then InvNum else 0  end)'
                        from   Work
                        where CreateDate between CONVERT(varchar(7), dateadd(mm,-1,getdate()) , 120) +  '-22' and CONVERT(varchar(7), getdate() , 120) + '-22'
                          -- group by InvModel
                        print(@sql)
                        set @sql=substring(@sql,2,len(@sql)-1)--去掉逗号
                             print(@sql)
  exec ('select   ' + @sql + '   from WorkO  ')
   消息 537,级别 16,状态 3,第 8 行
传递给 LEFT 或 SUBSTRING 函数的长度参数无效。
 
消息 156,级别 15,状态 1,第 1 行
关键字 'from' 附近有语法错误。
  
出错啊  我把where 条件去掉  就不会报错  这是为什么啊??

解决方案 »

  1.   

    你先别exec
    select ('select   ' + @sql + '   from WorkO  ')
    把语句粘出来看出来有啥错
      

  2.   

    set @sql=substring(@sql,2,len(@sql)-1)--去掉逗号这行用set @sql=stuff(@sql,1,1,'')试试
      

  3.   

    结果 消息 537,级别 16,状态 3,第 8 行
    传递给 LEFT 或 SUBSTRING 函数的长度参数无效。
     (1 行受影响)select      from WorkO
      

  4.   

    结果:
    消息 156,级别 15,状态 1,第 1 行
    关键字 'from' 附近有语法错误。
      

  5.   

    很明显的,你生成@SQL 变量的部分的符合查询条件的结果为零,得到的@SQL 是一个空字符串。