SQL通过msdb.dbo.sp_send_dbmail将查询发送到电子邮件:单引号错误。

时间:2018-11-09 21:37:39

标签: sql sql-server email

在下面的@query字段中,我在开头和结尾使用'来指定查询。下面的块起作用。

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'SendCallCenter',
    @recipients = 'person@email.edu',
    @subject = 'Previous_No_Shows',
    @query = 
    N'Select
        [NETEWLifePRODDBV1.8.7].[dbo].[tblClient].[fldFirstName],[fldLastName],[fldLocation],[fldJHEDId], 
        [NETEWLifePRODDBV1.8.7].[dbo].[tblClientSchedule].[fldDuration],[fldDate]
    FROM 
        [NETEWLifePRODDBV1.8.7].[dbo].[tblClientSchedule] Inner Join [NETEWLifePRODDBV1.8.7].[dbo].[tblClient]
    on
        [NETEWLifePRODDBV1.8.7].[dbo].[tblClientSchedule].[fldClientId]= [NETEWLifePRODDBV1.8.7].[dbo].[tblClient].[fldClientId]
   WHERE
        [fldApptOutcomeId] = 4;',
    @attach_query_result_as_file = 1,
    @query_attachment_filename = 'Data.csv' 

但是,当我在WHERE中引入两个新的datetime参数时,这些行中的'会中断数值处的字符串。

enter image description here

Msg 102, Level 15, State 1, Line 13
Incorrect syntax near '17530101'.

我可以用来将整个查询保持为连续字符串吗?

I used this tutorial

1 个答案:

答案 0 :(得分:1)

您必须转义单引号。

`..dd,''17530101'',getdate()....`

正确执行操作后,您将不会看到蓝色的日期。另一个很棒的调试提示是将查询设置为参数

declare @sql varchar(max) = 'select ...'

然后您可以将其打印出来,以确保连接,转换等工作正常。

print @sql

例如:

declare @sql varchar(max) = 'select datediff(dd,''17530101'',getdate())'
print @sql

一旦知道查询字符串正确,也可以通过设置@sql在过程执行中使用@query = @sql