sp_send_dbmail列标题格式问题(“ @ Column1Name”附近的语法不正确)

时间:2019-02-11 14:09:36

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

尝试连接列标题时,我不断收到“ +”附近的错误语法。我尝试遵循以下教程:

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)'

enter image description here

2 个答案:

答案 0 :(得分:4)

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

首先将完整结果设置为变量,然后只需将该变量作为参数传递即可。

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)'

答案 1 :(得分:1)

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