我想构建 HTML 并使用 sp_send_dbmail 发送它。此页面上的选项 C 说明了如何执行此操作。 http://msdn.microsoft.com/en-us/library/ms190307.aspx
但这是我的收获。我创建了一个名为 AbcStats 的存储过程。很多时候,我去 SSMS 并只是在没有电子邮件的情况下执行“exec ABCStats”,并且只想在屏幕上的数据网格中查看结果集。我已经设置了一些我自己的标准,将结果评定为“好”或“坏”,当任何东西都不好时,存储过程返回 1,当一切都好时返回 0。
然后我创建了一个运行 Sproc JobAbcAlert 的 SQL 代理作业,如下所示:
ALTER Procedure
[dbo].[JobAbcAlert]
(
@SendEmailOnlyOnError bit = 1
)
as
begin
DECLARE @Status int
DECLARE @BoolSendEmail bit = 0
DECLARE @emailSubject varchar(100) = 'BizTalk Feed Status - Good'
-- Call Stored Proc first time to find out if status is "GOOD" or "BAD"
-- which is used to determine if email is sent, and what is subject of email
EXEC @status = AbcStats @report='short' -- faster to run with "short" report option
if @status = 1 -- (0=all good, 1=at least one "BAD" encountered)
Begin
print 'BAD status, setting email subject'
SET @emailSubject = 'QT PRODUCTION ISSUE: BizTalk Feed Status - CRITICAL - contact BizTalk team '
End
if @status = 1 or @SendEmailOnlyOnError = 0
Begin
SET @BoolSendEmail = 1
End
if @BoolSendEmail = 1
Begin
print 'sending email'
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'DoNotReply@SomeCompany.com',
@recipients = 'MyPeeps@SomeCompany.com',
@subject = @emailSubject,
@query = 'exec abcStats @report=''full'';',
@append_query_error = 1,
@query_result_separator = ' '
/* SMS not yet working */
/*
TODO Send a short text email that can be forwarded to SMS
*/
End
end
我试图不重写代码。abcStats 是 300 行代码,可能会增长到包含其他有用的警报。
如果我在 abcStats 中创建 HTML,那么运行它 SMS 将没有那么有用。我可以获取结果集并将其包装在 jobAbcStats 中的 HTML 中吗?如果我将 abcStats 重写为表函数,那么我可以将 HTML 放入 jobAbcStats 中吗?仅需要对电子邮件进行 HTML 格式设置。
我之前的帖子有些相关: Alternative and Best ways to format SQL query for phone alert messages