【问题标题】:sp_send_dbmail Column Header Format Issue (Incorrect syntax near '@Column1Name')sp_send_dbmail 列标题格式问题(“@Column1Name”附近的语法不正确)
【发布时间】:2019-07-05 01:19:16
【问题描述】:

在尝试连接列标题时,我不断收到“'+' 附近的语法不正确错误。我正在尝试按照以下教程进行操作:

https://www.purplefrogsystems.com/blog/2014/04/excel-doesnt-open-csv-files-correctly-from-sp_send_dbmail/

DECLARE @tab char(1) = CHAR(9)
DECLARE @Column1Name VARCHAR(255)
SET @Column1Name = '[sep=,' + CHAR(13) + CHAR(10) + 'Date]'


EXEC msdb.dbo.sp_send_dbmail
@recipients = 'test@gmail.com',
@attach_query_result_as_file = 1,
@query_attachment_filename='test.csv',
@query_result_separator=@tab,
@query_result_no_padding=1,

@body = 'See attached file',

@subject = 'Testing Data',
@query = '(SELECT CONVERT(CHAR(20), Date, 20) AS' + @Column1Name + ', 
           Column2 FROM testTable)'

【问题讨论】:

  • AS 后面加一个空格。并且不能为存储过程参数提供表达式,需要预先计算。
  • 谢谢!但是我添加了空间,我仍然遇到同样的错误

标签: sql sql-server csv tsql stored-procedures


【解决方案1】:

执行存储过程时,不能提供表达式作为参数。

首先将完整结果设置为一个变量,然后将该变量作为参数传递:

DECLARE @tab char(1) = CHAR(9)
DECLARE @Column1Name VARCHAR(255)
SET @Column1Name = '[sep=,' + CHAR(13) + CHAR(10) + 'Date]'

DECLARE @query VARCHAR(MAX) = '(SELECT CONVERT(CHAR(20), Date, 20) AS' + @Column1Name + ', Column2 FROM testTable)'

EXEC msdb.dbo.sp_send_dbmail
    @recipients = 'test@gmail.com',
    @attach_query_result_as_file = 1,
    @query_attachment_filename='test.csv',
    @query_result_separator=@tab,
    @query_result_no_padding=1,
    @body = 'See attached file',
    @subject = 'Testing Data',
    @query = @query

PD:在构建动态 SQL 时,您可能需要检查是否需要在连接之间添加空格。在这种情况下,不需要,因为您已经有了方括号,但不妨习惯于添加空格。

 ... '20) AS ' + @Column1Name + ' , Column2 FROM testTable)'

【讨论】:

  • 谢谢!但是我添加了空间,我仍然遇到同样的错误
  • 空格不是解决方案,第一部分是(不直接在 SP 调用上提供表达式)。
  • 你是对的!非常感谢您的帮助!
【解决方案2】:

您可能需要在其中添加一个额外的空格。 目前它将解析为 CONVERT(CHAR(20), Date, 20) AS@Column1Name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多