错误提示:消息 102,级别 15,状态 1,第 1 行
'2008' 附近有语法错误。
消息 105,级别 15,状态 1,第 1 行
字符串 '' 后的引号不完整。declare @s varchar(max) 
declare @s2 varchar(100) 
declare @s3 DateTime 
declare @s4 varchar(100) 
declare @s5 DateTime 
declare @i int 
set @s = '' 
set @s2 = '' 
set @s3 = '' 
set @s4 = '' 
set @s5 = '' select @s = @s + ''''+xslcountent+''',' 
from xslcountent 
where datediff(day,xslshortdate ,getdate()) = 0 and zhrz='是' 
order by xslshortdate  
select 
    @i = @@rowcount, 
    @s = @s + replicate(''''',',10 - @i) select distinct @s2 = xslsourceguid 
from xslcountent 
where datediff(day,xslshortdate,getdate()) = 0 and zhrz='是' select distinct @s3 = xslshortdate 
from xslcountent 
where datediff(day,xslshortdate,getdate()) = 0 and zhrz='是' select distinct @s4 = xslsourcename 
from xslcountent 
where datediff(day,xslshortdate,getdate()) = 0 and zhrz='是' select distinct @s5 = xslshortdate 
from xslcountent 
where datediff(day,xslshortdate,getdate()) = 0 and zhrz='是' 
set @s = @s + '''' + @s2 + '''' +convert(varchar(30),@s3,121)+ ''''+@s4 + ''''+convert(varchar(30),@s5,121)+ '''' 
if @i > 0    
    exec('insert worklog(workcontent1,workcontent2,workcontent3,workcontent4,workcontent5,workcontent6,workcontent7,workcontent8,workcontent9,workcontent10,usernameguid,workdate,username,longdatetime) select ' + @s) 

解决方案 »

  1.   

    exec('insert worklog(workcontent1,workcontent2,workcontent3,workcontent4,workcontent5,workcontent6,workcontent7,workcontent8,workcontent9,workcontent10,usernameguid,workdate,username,longdatetime) select ' + @s) 是这里出错了建议你试试以下的方法
    declare @sqlstr varchar(8000)
    set @sqlstr=''
    set sqlstr=''insert worklog(workcontent1,workcontent2,workcontent3,workcontent4,workcontent5,workcontent6,workcontent7,workcontent8,workcontent9,workcontent10,usernameguid,workdate,username,longdatetime) select '
    set @sqlstr=@sqlstr+@s
    print @sqlstr --输出完整查询语句
    在查询分析器里面直接执行输出的查询语句,看看哪里有问题,修改一下,这样就很容易发现错误了
      

  2.   

    exec('insert worklog(workcontent1,workcontent2,workcontent3,workcontent4,workcontent5,workcontent6,workcontent7,workcontent8,workcontent9,workcontent10,usernameguid,workdate,username,longdatetime) select ' + @s) 
    是这里出错了 建议你试试以下的方法 
    declare @sqlstr varchar(8000)
    set @sqlstr=''
    set sqlstr='insert worklog(workcontent1,workcontent2,workcontent3,workcontent4,workcontent5,workcontent6,workcontent7,workcontent8,workcontent9,workcontent10,usernameguid,workdate,username,longdatetime) select '
    set @sqlstr=@sqlstr+@s
    print @sqlstr --输出完整查询语句
    在查询分析器里面直接执行输出的查询语句,看看哪里有问题,修改一下,这样就很容易发现错误了
      

  3.   

    如果把代码改成这样就可以用了,但是少插入了三个数据。不知道问题到底在那里我想得到的结果是这样的
    就是说,xslcountent表中有n条当天数据,通过作业定时将这n条都插入到worklog中的content1,content2,.......content10,但是xslcountent表中的有四个相同的字段只插入一个到worklog中
    比如有如下条数据 id content xslsourcename  xslsourceguid       xslshortdate 
    1    111      lu          fesfsf              2008-07-10
    2    222      lu           fesfsf             2008-07-10
    3    333      lu           fesfsf             2008-07-10
    4    444      lu           fesfsf             2008-07-10
    5    555      lu           fesfsf                 2008-07-10
    结果worklog表是一条记录 
    xslid  content1  content2  content3  content4 content5..content10 xslsourcename xslsourceguid
    1        111      222        333      444      555                      lu          fesfsfdeclare @s varchar(max) 
    declare @s2 varchar(100) declare @i int 
    set @s = '' 
    set @s2 = '' 
    select @s = @s + ''''+xslcountent+''',' 
    from xslcountent 
    where datediff(day,xslshortdate ,getdate()) = 0 and zhrz='是' 
    order by xslshortdate  
    select 
        @i = @@rowcount, 
        @s = @s + replicate(''''',',10 - @i) select distinct @s2 = xslsourceguid 
    from xslcountent 
    where datediff(day,xslshortdate,getdate()) = 0 and zhrz='是' 
    set @s = @s + '''' + @s2 + ''''
    if @i > 0    
        exec('insert worklog(workcontent1,workcontent2,workcontent3,workcontent4,workcontent5,workcontent6,workcontent7,workcontent8,workcontent9,workcontent10,usernameguid) select ' + @s) 
      

  4.   

    楼上给的语句测试提示错误消息 102,级别 15,状态 1,第 42 行
    '=' 附近有语法错误。这句报错:set sqlstr='insert worklog(workcontent1,workcontent2,workcontent3,workcontent4,workcontent5,workcontent6,workcontent7,workcontent8,workcontent9,workcontent10,usernameguid,workdate,username,longdatetime) select '