创建了一个存储过程实现在sql server 2000里把sql查询结果生成文本文件,遇到问题如下,哪些地方需要修改,各位大牛帮忙看下。存储过程创建代码如下:
  create PROCEDURE sp_sql_query_to_file(
  @servername varchar(50), --服务器名
  @username varchar(50), --用户名,如果用NT验证方式,则为空’’
  @password varchar(50) , --密码
  @sql_query varchar(2000) , --SQL查询语句,有字符条件时用单引号
  @filePath_name varchar(1000), --导出路径和文件名
  @date datetime --保存文件时的生成日期戳
  )AS
  DECLARE @sql varchar(8000)
  SET @sql=’bcp "’+@sql_query + ’" queryout ’+’ "’+@filePath_name+’_’+
  convert(varchar(12),@date,112)+’.txt " /t "," /w’
  +’ /S ’+@servername
  +CASE WHEN ISNULL(@username,’’)=’’ THEN ’’ ELSE ’ /U ’+@username END
  +’ /P ’+ISNULL(@password,’’)  
  select @sql 
  EXEC master..xp_cmdshell @sql
  IF @@Error<>0 BEGIN
  print ’生成文件时出错了,请查看!’+@@Error
  END
  GO报错如下:
消息 170,级别 15,状态 1,第 1 行
第 1 行: ' ' 附近有语法错误。
消息 170,级别 15,状态 1,第 10 行
第 10 行: ' ' 附近有语法错误。
消息 170,级别 15,状态 1,第 10 行
第 10 行: '’' 附近有语法错误。
消息 170,级别 15,状态 1,第 16 行
第 16 行: ' ' 附近有语法错误。
消息 170,级别 15,状态 1,第 17 行
第 17 行: ' ' 附近有语法错误。

解决方案 »

  1.   

    逗号问题
    create PROCEDURE sp_sql_query_to_file(
      @servername varchar(50), --服务器名
      @username varchar(50), --用户名,如果用NT验证方式,则为空''
      @password varchar(50) , --密码
      @sql_query varchar(2000) , --SQL查询语句,有字符条件时用单引号
      @filePath_name varchar(1000), --导出路径和文件名
      @date datetime --保存文件时的生成日期戳
      )AS
      DECLARE @sql varchar(8000)
      SET @sql='bcp "'+@sql_query + '" queryout '+' "'+@filePath_name+'_'+
      convert(varchar(12),@date,112)+'.txt " /t "," /w'
      +' /S '+@servername
      +CASE WHEN ISNULL(@username,'')='' THEN '' ELSE ' /U '+@username END
      +' /P '+ISNULL(@password,'')   
      select @sql 
      EXEC master..xp_cmdshell @sql
      IF @@Error<>0 BEGIN
      print '生成文件时出错了,请查看!'+@@Error
      END
      GO
      

  2.   

    已经替换了单引号,执行如下存储过程,还是报错:create PROCEDURE sp_sql_query_to_file(
      @servername varchar(50), --服务器名
      @username varchar(50), --用户名,如果用NT验证方式,则为空''
      @password varchar(50) , --密码
      @sql_query varchar(2000) , --SQL查询语句,有字符条件时用单引号
      @filePath_name varchar(1000), --导出路径和文件名
      @date datetime --保存文件时的生成日期戳
      )AS
      DECLARE @sql varchar(8000)
      SET @sql='bcp "'+@sql_query+ '" queryout'+' "'+@filePath_name+'_'+
      convert(varchar(12),@date,112)+'.txt " /t "," /w'
      +' /S '+@servername
      +CASE WHEN ISNULL(@username,'')='' THEN '' ELSE ' /U '+@username END
      +' /P '+ISNULL(@password,'')   
      select @sql 
      EXEC master..xp_cmdshell @sql
      GO报错如下:
    消息 170,级别 15,状态 1,第 1 行
    第 1 行: ' ' 附近有语法错误。
    消息 170,级别 15,状态 1,第 10 行
    第 10 行: ' ' 附近有语法错误。
    消息 137,级别 15,状态 2,第 10 行
    必须声明变量 '@sql_query'。
    消息 170,级别 15,状态 1,第 17 行
    第 17 行: ' ' 附近有语法错误。