DECLARE @S VARCHAR(8000) SELECT @S='select salesmanname,isnull(so,''Wating for SO release'') as so,podname,services,FD, 
BerthCanceltwentysize*0.5+BerthCancelfourtysize+BerthCancelhq+BerthCancelfortyfivesize as BerthCancelF, 
twentysize*0.5+fourtysize+hq+fortyfivesize as ApplyF 
from v_bk_BListProc  ' + ltrim(@Sd) 
+ ' and  dbo.DateConvertWeek(si) between '+ ltrim(@Week1) + ' and '+ ltrim(@Week2) 
EXEC(@S) 
多个ltrim,多份正确保障.

解决方案 »

  1.   

    直接运行这部分语句,能够成功执行:
    SELECT @S='select salesmanname,isnull(so,''Wating for SO release'') as so,podname,services,FD, 
    BerthCanceltwentysize*0.5+BerthCancelfourtysize+BerthCancelhq+BerthCancelfortyfivesize as BerthCancelF, 
    twentysize*0.5+fourtysize+hq+fortyfivesize as ApplyF 
    from v_bk_BListProc  ' + @Sd EXEC(@S) 
      

  2.   

    就是转换成整形了才出错。DECLARE @S VARCHAR(8000) SELECT @S='select salesmanname,isnull(so,''Wating for SO release'') as so,podname,services,FD, 
    BerthCanceltwentysize*0.5+BerthCancelfourtysize+BerthCancelhq+BerthCancelfortyfivesize as BerthCancelF, 
    twentysize*0.5+fourtysize+hq+fortyfivesize as ApplyF 
    from v_bk_BListProc  ' + @Sd 
    + ' and  dbo.DateConvertWeek(si) between '+ CAST(@Week1 AS NVARCHAR(5)) + ' and '+ CAST(@Week2 AS NVARCHAR(5)) 
    它是说 ' and  dbo.DateConvertWeek(si) between ' 这个字符串转换成后面的类型-整形 出错
      

  3.   

    主要原因是字符型不能跟数字型在一起拼串,把数字型的也转为字符串就对了.ltrim用起来比较简单,也习惯了.当然你也可以用 cast(@week as varchar)
      

  4.   

    用''引起来的SQL,里面的变量都要转化成字符类型的,才不会出问题。
      

  5.   

    dbo.DateConvertWeek(si) 返回的是整数吗,如果不是的话就会报类型转换错误了。还有就是最好把函数的返回值类型发出来看看。
      

  6.   

    DECLARE @S VARCHAR(8000) SELECT @S='select salesmanname,isnull(so,''Wating for SO release'') as so,podname,services,FD, 
    BerthCanceltwentysize*0.5+BerthCancelfourtysize+BerthCancelhq+BerthCancelfortyfivesize as BerthCancelF, 
    twentysize*0.5+fourtysize+hq+fortyfivesize as ApplyF 
    from v_bk_BListProc  ' + @Sd 
    + ' and  dbo.DateConvertWeek(si) between '+ cast(@Week1 as varchar(10)) + ' and '+ cast(@Week2 as varchar(10))
    EXEC(@S) 
      

  7.   

    SELECT @S='select '' as bookingnumber,'' as jobvslnumber,'' as shipperfuname,
    '' as coneefuname,'' as agentfuname,
    vessel+''(Total)'' as vessel,'' as voyage,'' as por,'' as polname,
    '' as etd,'' as stshname,
    '' as comshname,sum(facttwentysize) as facttwentysize
    ,sum(factfourtysize) as factfourtysize,sum(facthq) as facthq,
    sum(factfortyfivesize) as factfortyfivesize,'' as bkgaddshname
    ,'' as salesmanname,'' as so,'' as podname,'' as services,'' as FD,
    sum(BerthCanceltwentysize)*0.5+sum(BerthCancelfourtysize)+sum(BerthCancelhq)+sum(BerthCancelfortyfivesize) as BerthCancelF,
    sum(twentysize)*0.5+sum(fourtysize)+sum(hq)+sum(fortyfivesize) as ApplyF
    from v_bk_BListProc ' + ltrim(@Sd) 
    + ' and  dbo.DateConvertWeek(si) between '+ ltrim(@Week1) + ' and '+ ltrim(@Week2) 
    + ' group by vessel'提示:消息 102,级别 15,状态 1,第 3 行
    'Total' 附近有语法错误。
    消息 105,级别 15,状态 1,第 11 行
    字符串 ' and  dbo.DateConvertWeek(si) between 16 and 17 group by vessel' 后的引号不完整。
      

  8.   

    SELECT @S='select '''' as bookingnumber,'''' as jobvslnumber,'''' as shipperfuname, 
    '''' as coneefuname,'''' as agentfuname, 
    vessel+''(Total)'' as vessel,'''' as voyage,'''' as por,'''' as polname, 
    '''' as etd,'''' as stshname, 
    '''' as comshname,sum(facttwentysize) as facttwentysize 
    ,sum(factfourtysize) as factfourtysize,sum(facthq) as facthq, 
    sum(factfortyfivesize) as factfortyfivesize,'''' as bkgaddshname 
    ,'''' as salesmanname,'''' as so,'''' as podname,'''' as services,'''' as FD, 
    sum(BerthCanceltwentysize)*0.5+sum(BerthCancelfourtysize)+sum(BerthCancelhq)+sum(BerthCancelfortyfivesize) as BerthCancelF, 
    sum(twentysize)*0.5+sum(fourtysize)+sum(hq)+sum(fortyfivesize) as ApplyF 
    from v_bk_BListProc ' + ltrim(@Sd) 
    + ' and  dbo.DateConvertWeek(si) between '+ ltrim(@Week1) + ' and '+ ltrim(@Week2) 
    + ' group by vessel' 这样呢?