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

时间:2012-05-30 03:02:00

标签: 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, Line 1
The multi-part identifier "email@example.com" could not be bound.

以下是我的代码的简化版本,asssuming table1是一个有效的现有表,名称和电子邮件是现有列。

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)是错误的。我无法弄清楚。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您需要将@current_email的值放在引号中:

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

要了解原因,请考虑一下您的查询目前的情况:

SELECT ... WHERE email = email@example.com

每次使用动态SQL时,如果出现奇怪的错误,最好将PRINT变量用于调试;通常情况下,您构建的SQL字符串不是您期望的字符串。我提出了一种简单的方法来管理另一个不相关的answer

中的调试代码