我有几个 SQL 脚本,我想每天在我的 SQL Server 上运行。如何多次查询并获得类似于以下内容的输出:
Health check for <server>
Query Title 1:
<query results 1>
Query Title 2:
<query results 2>
我正在检查上次良好备份、正常运行时间等内容,因此它们彼此无关。我计划在 SQL Server 作业中使用 sp_send_db_mail。这是完成这项任务的最佳方式吗?
理想情况下,我只想要一封电子邮件。
更新
经过多年的战斗!到目前为止我找到的解决方案是将其放入存储过程,然后像这样执行存储过程:
EXEC msdb.dbo.sp_send_dbmail
@recipients = N'<email>',
@body = @body,
@subject = @subjectt,
@profile_name = @ProfileName,
@query ='exec test..sp_checks'
这对多个 select 语句可以吗?
这更多的只是关于哲学而不是技术的注释。
如果您这样做,我会确保对其设置一些限制,以便它仅在您超出这些限制时才发送电子邮件。
例如,如果您的 CPU 经常达到 100%,我会发送电子邮件。但是,如果 CPU 没有问题,我会明确地故意不发送电子邮件。
如果您每天从数据库中收到一封电子邮件,您将在一段时间后开始忽略它们。但是,如果您只在有您认为应该检查的内容时才收到它们,您就更有可能查看这些电子邮件。
此外,我将使这些限制可配置(甚至可能制作标志以便可以打开或关闭特定查询)。
关于您在一封电子邮件中进行多项选择的问题,听起来有两种选择:
获取每个查询的结果并将它们格式化为包含您想要的所有内容的字符串。
将所有不同的结果合并到一个查询中,然后将 @query 设置为该查询。(或者,将所有结果粘贴到临时表中并查询临时表。)
我应该注意,可以在 @query 中粘贴一个查询,并将第二个查询的结果粘贴在 @body 中(根据here和here),但这只允许您使用两个语句。
我会在存储过程中尝试选项一。诀窍是将表格格式化为字符串。但是,它最有可能正常工作。