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字符串不是您期望的字符串。我建议用另一种不相关的方式管理调试代码