我试图添加"签名"在存储过程的底部,以显示运行它的作业,运行它的服务器以及存储过程名称(我已经找到了代码)。但是,如果我尝试插入签名,它将被放置在电子邮件中的查询结果上方。我试图捕获该文本结果以手动将其添加到电子邮件正文中,以便我可以在其下面放置签名。
SQL Server如何使用EXEC msdb.dbo.sp_send_dbmail
将查询转换为电子邮件中显示的文本?
此外,有没有办法可以将该文本捕获到局部变量中?
答案 0 :(得分:0)
如果检查sp_send_dbmail
存储过程,您可以看到它正在做什么。简短的版本是它
重点是没有简单的方法来自定义电子邮件的组合方式。您最好设计自己的某种外部流程来构建和发送电子邮件。
答案 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