Tenho alguns scripts SQL que gostaria de executar todos os dias em meu(s) SQL Server(s). Como posso consultar várias vezes e ter a saída semelhante à seguinte:
Health check for <server>
Query Title 1:
<query results 1>
Query Title 2:
<query results 2>
Estou verificando coisas como último backup bom, tempo de atividade, etc., para que não estejam relacionados entre si. Estou planejando usar sp_send_db_mail dentro de um trabalho do SQL Server. Esta é a melhor maneira de realizar esta tarefa?
Idealmente, gostaria apenas de um e-mail.
Atualizar
Depois de lutar por anos!!! A solução que encontrei até agora é colocá-lo em um procedimento armazenado e, em seguida, executar o procedimento armazenado da seguinte forma:
EXEC msdb.dbo.sp_send_dbmail
@recipients = N'<email>',
@body = @body,
@subject = @subjectt,
@profile_name = @ProfileName,
@query ='exec test..sp_checks'
Isso está ok para várias instruções de seleção?
Esta é mais apenas uma nota sobre a filosofia do que sobre a técnica.
Se você fizesse isso, eu definiria alguns limites para que ele enviasse e-mails apenas quando você estivesse fora desses limites.
Por exemplo, se sua CPU estiver atingindo 100% de frequência, eu enviaria o e-mail. No entanto, se não houver problemas com a CPU, eu não enviaria explicitamente e intencionalmente o e-mail.
Se você receber um e-mail diário do seu banco de dados, começará a ignorá-lo depois de um tempo. Mas se você só os recebe quando há algo que acha que deve verificar, é mais provável que você veja os e-mails.
Além disso, tornaria esses limites configuráveis (e possivelmente até sinalizadores para que consultas específicas possam ser ativadas ou desativadas).
Em relação à sua questão de várias seleções em um único e-mail, parece que há duas opções:
Obtenha os resultados de cada consulta e formate-os em uma string que contenha tudo o que você deseja.
Mescle todos os diferentes resultados em uma única consulta e, em seguida, defina sua @consulta para isso. (Como alternativa, inserir todos os resultados em uma tabela temporária e consultar a tabela temporária.)
É possível, devo observar, inserir uma consulta no @query, bem como inserir os resultados de uma segunda consulta no @body (por aqui e aqui ), mas isso permite apenas duas instruções.
Eu tentaria a opção um dentro de um procedimento armazenado. O truque seria formatar a tabela na string. No entanto, é mais provável que funcione corretamente.