sql - 使用curser发送多个数据库邮件
问题描述
我有一个包含 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
但是,当我执行此操作时,我没有收到任何错误。只得到消息告诉
命令成功完成
我无法得到
邮件(ID:16)排队。
通常应与这种处决一起出现的消息。
这个脚本的错误在哪里?
解决方案
您将@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'
推荐阅读
- spring-boot - 当它们都部署在 kubernetes 上时,spring boot 应用程序中的 jaeger 配置
- ios - 使用 DispatchQueue 在回调中调用时不显示警报
- python - 关于指针与在链表中操作对象的说明
- php - 链接作为其他文件中的变量
- c# - 创建新范围时添加范围服务
- javascript - Laravel+Vuejs:v-model 没有连接到 app.js
- sapui5 - sap.m.Wizard:discardProgress 后 nextStep 无法正常工作
- ruby - Ruby 动态方法调用的问题
- reactjs - 当我尝试将道具传递给孩子时映射不是函数错误
- dbeaver - 有没有办法找到引用 DBeaver 中另一个表/列的所有表?