我正在尝试将电子邮件单独发送到收件人列表。我收到错误:
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)是错误的。我无法弄清楚。有什么想法吗?
答案 0 :(得分:2)
您需要将@current_email
的值放在引号中:
'SELECT ... WHERE email = ''' + @current_email + ''''
要了解原因,请考虑一下您的查询目前的情况:
SELECT ... WHERE email = email@example.com
每次使用动态SQL时,如果出现奇怪的错误,最好将PRINT变量用于调试;通常情况下,您构建的SQL字符串不是您期望的字符串。我提出了一种简单的方法来管理另一个不相关的answer。
中的调试代码