sp_send_dbmail如何将查询转换为电子邮件正文中的文本

时间:2014-06-19 19:35:20

标签: sql-server tsql

我试图添加"签名"在存储过程的底部,以显示运行它的作业,运行它的服务器以及存储过程名称(我已经找到了代码)。但是,如果我尝试插入签名,它将被放置在电子邮件中的查询结果上方。我试图捕获该文本结果以手动将其添加到电子邮件正文中,以便我可以在其下面放置签名。

SQL Server如何使用EXEC msdb.dbo.sp_send_dbmail将查询转换为电子邮件中显示的文本?

此外,有没有办法可以将该文本捕获到局部变量中?

2 个答案:

答案 0 :(得分:0)

如果检查sp_send_dbmail存储过程,您可以看到它正在做什么。简短的版本是它

  • 运行查询并将结果存储在系统表(sysmail_mailitems)中,以及所有其他消息详细信息
  • 将邮件发送到邮件队列
  • 外部邮件服务实际上构造并将邮件发送给收件人

重点是没有简单的方法来自定义电子邮件的组合方式。您最好设计自己的某种外部流程来构建和发送电子邮件。

答案 1 :(得分:0)

我相信在过去我已经将电子邮件构建为HTML,并将查询结果注入到邮件正文变量中(而不是使用@query参数) - 这需要,或者至少我使用了一些“FOR XML” PATH“在体内构建html表的功能。

原谅可怕,我没有在家里设置dbmail所以我不能用实际的sp来测试它,但它应该得到重点 - 是的它有点乱,但是它的工作:p

declare @body varchar(max)

set @body = 'Hello world<br /><br />'

declare @temp table (
    id int primary key identity(1,1) ,
    name varchar(50) ,
    isAwesome bit default 0
)

insert into @temp (name, isAwesome)
select 'turtle', 1
union all select 'popsicles', 0
union all select 'bees', 0

declare @xml xml = (
    select  name as td, isAwesome as td
    from    @temp
    for     xml raw ('tr'), elements
)

set @body = @body + '<table>'
set @body = @body + convert(varchar(max), @xml)
set @body = @body + '</table>'

set @body = @body +  '
<br /><br />
Signature'

select @body