0

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

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)是错误的。我想不通。有任何想法吗?

4

1 回答 1

2

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

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

要了解原因,请考虑在没有它的情况下您的查询当前的样子:

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

每当您使用动态 SQL 时,如果遇到奇怪的错误,最好打印变量以进行调试;通常情况下,您构建的 SQL 字符串不是您所期望的。我建议了一种在另一个不相关的答案中管理调试代码的简单方法。

于 2012-05-30T07:03:03.873 回答