存储过程如下:参数都是VARCHAR值declare @vshpchd varchar(26)
set @vshpchd='云南白药'exec p_exporttb 
@sqlstr='select * from openrowset(''sqloledb'',''Trusted_Connection=yes'',''exec khyy.hszy.dbo.pr_getemail'')',
@path='f:\zwmail\',@fname='''@vshpchd''+''.xls''',@sheetname='sss'其中@fname=
后面的总是不对,引号不知道如何加,加在什么地方才对
麻烦把这个语句改正确,并能告诉我这类连接变量和常量的引号和+号如何用?有什么规律没?

解决方案 »

  1.   

    declare @vshpchd varchar(26)
    set @vshpchd='云南白药'exec p_exporttb 
    @sqlstr='select * from openrowset(''sqloledb'',''Trusted_Connection=yes'',''exec khyy.hszy.dbo.pr_getemail'')',
    @path='f:\zwmail\',@fname=@vshpchd+'.xls',@sheetname='sss'--这样?
      

  2.   

    建议用print把变量打印出来
    然后看看具体哪个地方有问题
      

  3.   

    declare @vshpchd varchar(26)
    set @vshpchd='云南白药'declare @fname varchar(1000)
    set @fname=@vshpchd+'.xls'
    exec p_exporttb 
    @sqlstr='select * from openrowset(''sqloledb'',''Trusted_Connection=yes'',''exec khyy.hszy.dbo.pr_getemail'')',
    @path='f:\zwmail\',@fname=@fname,@sheetname='sss'
      

  4.   

    是不是 @path 有问题。
      

  5.   

    declare @vshpchd varchar(26)
    set @vshpchd='云南白药'
    declare @fname varchar(100)
    set @fname+'.xls'exec p_exporttb 
    @sqlstr='select * from openrowset(''sqloledb'',''Trusted_Connection=yes'',''exec khyy.hszy.dbo.pr_getemail'')',
    @path='f:\zwmail\',@fname=@fname,@sheetname='sss'当简单的设置@fname='5.xls'时没问题
    当复杂的设置@fname==@vshpchd+datepart(month,dateadd(month,-1,getdate()))+'月'+'.xls'
    时,提示
    -----------------------------------
    服务器: 消息 245,级别 16,状态 1,行 4
    将 varchar 值 '云南白药' 转换为数据类型为 int 的列时发生语法错误。奇怪的是,只执行:
    declare @vshpchd varchar(26)
    set @vshpchd='云南白药'
    declare @fname varchar(100)
    set @fname=@vshpchd+datepart(month,dateadd(month,-1,getdate()))+'月'+'.xls'
    print @fname不执行EXEC程序,也提示这个同样的错误
    如何解决?怎么回事?
      

  6.   

    declare @vshpchd varchar(26)
    set @vshpchd='云南白药'
    declare @fname varchar(100)
    set @fname=@vshpchd+cast(datepart(month,dateadd(month,-1,getdate())) as varchar)+'月'+'.xls'exec p_exporttb 
    @sqlstr='select * from openrowset(''sqloledb'',''Trusted_Connection=yes'',''exec khyy.hszy.dbo.pr_getemail'')',
    @path='f:\zwmail\',@fname=@fname,@sheetname='sss'
      

  7.   

    如楼上就可以了, 类型转换有优先级的, int的优先组高于字符, 所以楼主的写法会尝试把结果统一为int型
      

  8.   

    唉,没有月份的数字变为VARCHAR,还是平时手上来得 少,惭愧