You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SQL Server Agent在多步骤执行完成后生成TXT报告文件

SQL Server Agent 巡检单份汇总邮件实现方案

方案1:专用巡检结果表存储(生产环境首推,无安全风险)

这是最符合企业安全规范的实现方式,全程仅使用标准SQL操作,无需开启任何高风险组件:

  • 提前在运维库或业务库创建持久化的巡检结果存储表:
CREATE TABLE dbo.DailyCheckResult (
    CheckID INT IDENTITY(1,1) PRIMARY KEY,
    CheckItem VARCHAR(100) NOT NULL, -- 巡检项名称
    ExecDate DATE NOT NULL DEFAULT CONVERT(DATE, GETDATE()),
    Status VARCHAR(10) NOT NULL, -- 正常/异常
    Detail VARCHAR(MAX) NULL -- 异常详情/校验结果
)
  • 调整原有作业的每一个巡检步骤:删除步骤内的发邮件逻辑,改为巡检执行完成后,将本次巡检的结果、状态、所属巡检项插入上述表中。
  • 新增作业的最后一个步骤,专门负责发邮件:查询当日所有的巡检记录,作为sp_send_dbmail的@query参数,设置附件导出即可,发完可按需清理N天前的历史记录避免表占用过多空间。

示例最后一步的发邮件代码:

DECLARE @mysubject VARCHAR(100) = '每日数据库巡检报告-' + CONVERT(VARCHAR(10), GETDATE(), 23)
DECLARE @mybody VARCHAR(1000) = '附件为当日所有巡检项执行结果,请查阅'
DECLARE @myquery VARCHAR(2000) = 'SELECT CheckItem 巡检项, Status 状态, Detail 详情 FROM dbo.DailyCheckResult WHERE ExecDate = CONVERT(DATE, GETDATE()) ORDER BY CheckID'

EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'db_mailer',
  @recipients = @mailTo,
  @copy_recipients = @mailCc,
  @body = @mybody,
  @subject = @mysubject,   
  @query = @myquery,
  @attach_query_result_as_file = 1,
  @query_attachment_filename = '每日巡检结果.txt',
  @body_format = 'HTML';

方案2:合并所有巡检逻辑到单一步骤

如果各巡检步骤之间没有单独的失败重试、分支执行需求,可以把所有巡检逻辑整合到同一个作业步骤的SQL脚本中,用不同变量存储每个巡检项的结果,最后统一拼接为完整的报告内容,仅调用一次sp_send_dbmail即可,天然不存在跨步骤变量传递的问题。

补充优化建议

如果不需要附件,也可以在最后一步将巡检结果拼接为HTML格式的字符串写入邮件正文,收件人无需下载附件即可直接查看所有巡检结果。

内容的提问来源于stack exchange,提问作者Redd0beard0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:06:03