在下面的@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参数时,这些行中的'会中断数值处的字符串。
Msg 102, Level 15, State 1, Line 13
Incorrect syntax near '17530101'.
我可以用来将整个查询保持为连续字符串吗?
答案 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
。