我有一个表,其中包含ID,主题,结果和电子邮件列。我想发送主题和结果给用户。 我尝试使用波纹管代码执行此操作
Declare @ID INT
Declare Agent Cursor for
SELECT ID FROM myTable
GROUP BY ID
OPEN Agent
FETCH NEXT FROM Agent INTO @ID
While (@@Fetch_Status = 0)
Begin
DECLARE @email NVARCHAR(MAX)
SET @email = (SELECT email FROM myTable
WHERE ID = @ID)
DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT ID, Subject, Result FROM myTable WHERE ID = ''@ID'''
--print EXEC @query
EXEC msdb.dbo.sp_send_dbmail
@profile_name='Reports',
@recipients='my@email.com',
@subject = 'Results',
@body = ' ',
@body_format = 'HTML',
@query = @query,
@query_result_header = 0,
@exclude_query_output = 1,
@append_query_error = 1,
@attach_query_result_as_file = 1,
@query_attachment_filename = 'qry.txt',
@query_result_no_padding = 1
FETCH NEXT FROM Agent INTO @ID
end
CLOSE Agent
DEALLOCATE Agent
但是,当我执行此操作时,我没有任何错误。只收到一条告诉
的消息命令成功完成
我找不到
邮件(编号:16)已排队。
通常应该伴随这种执行的消息。
此脚本中的错误在哪里?
答案 0 :(得分:0)
您正在将@ID视为数字和字符串(我不知道它在“ myTable”中实际上是什么)-并且在首次执行sp_send_dbmail时可能会出现数据转换错误。
SET @email = (SELECT email FROM myTable
WHERE ID = @ID)
SET @query = 'SELECT ID, Subject, Result FROM myTable WHERE ID = ''@ID'''
尝试更改以上内容,将@ID视为数字。
SET @query = 'SELECT ID, Subject, Result FROM myTable WHERE ID = @ID'
答案 1 :(得分:0)
大概,您希望查询包含ID。我想你想要
SET @query = REPLACE('SELECT ID, Subject, Result FROM myTable WHERE ID = @ID', '@ID', @ID);
如documentation中所述:
请注意,查询是在单独的会话中执行的,因此脚本中调用sp_send_dbmail的局部变量对查询不可用。