Tsql 使用sp_send_dbmail中的变量执行查询时出错

Tsql 使用sp_send_dbmail中的变量执行查询时出错,tsql,Tsql,我正在尝试向收件人列表单独发送电子邮件。我收到错误信息: Msg 22050, Level 16, State 1, Line 0 Error formatting query, probably invalid parameters Msg 14661, Level 16, State 1, Procedure sp_send_dbmail, Line 478 Query execution failed: Msg 4104, Level 16, State 1, Server xxxxxx,

我正在尝试向收件人列表单独发送电子邮件。我收到错误信息:

Msg 22050, Level 16, State 1, Line 0
Error formatting query, probably invalid parameters
Msg 14661, Level 16, State 1, Procedure sp_send_dbmail, Line 478
Query execution failed: Msg 4104, Level 16, State 1, Server xxxxxx, Line 1
The multi-part identifier "email@example.com" could not be bound.
这是我的代码的简化版本,假设table1是一个有效的现有表,name和email是现有列

declare @current_mailaddress varchar(50), @query varchar(1000)
set @current_mailaddress = 'email@example.com'

set @query = 'select distinct name, email from table1 
              where email = ' + @current_email

exec msdb.dbo.sp_send_dbmail 
 @recipients = @current_email,
 @subject = 'test',
 @query = @query

因此,根据错误,格式化(大概是@query)是错误的。我想不出来。有什么想法吗?

你需要把
@current\u email
的值加引号:

'SELECT ... WHERE email = ''' + @current_email + ''''

看看为什么,考虑一下你的查询当前看起来是什么样子:

SELECT ... WHERE email = email@example.com
任何时候使用动态SQL时,如果遇到奇怪的错误,最好打印变量以进行调试;通常情况下,您构建的SQL字符串不是您期望的字符串。我建议用另一种不相关的方式管理调试代码