A situação: Criar um e-mail de alerta que informe, 1 vez por dia, ao usuário autorizador os pedidos que estão pendentes de sua autorização.

Recurso: DatabaseMail do SQL Server 2005

Como fazer?
A principio foi pensado em fazer uma tarefa para cada autorizador, onde esta tarefa enviava um e-mail com os pedidos pendentes de autorização para aquele autorizador em um determinado horário, ou seja, teríamos que criar várias tarefas quase idênticas, só alterando o autorizador…

Foi ai que entrou em cena: Yuri Nonato… que disse assim: “Vamos fazer isso de forma recursiva…”
Como?
Vamos fazer uma Procedure que pega o Código e o E-mail do Autorizador e pronto, ai no lugar de criarmos várias tarefas, criaríamos uma unica e chamávamos esta procedure para cada um dos autorizadores…

Resultado:
Ficou mais ou menos assim:

CREATE PROCEDURE [dbo].[sp_SendMail_Autoriza] (@CdUsr int,@Emailvarchar(80))
AS
BEGIN
DECLARE @Teste int;
DECLARE @Email_Ok varchar(80);
DECLARE @Email_Autorizacao NVARCHAR(MAX)

      SET @Email_Ok = @Email

SET @Email_Autorizacao =
N’<font size=2 face=”arial”>’ +
N’ Prezado Sr. Autorizador, ‘ +
N’<br>’ +
N’ Existe(m) pendencia(s) de autorização no sistema Fulanim (Tela de Autorização) aguardando sua liberação. ‘ +
N’<br>’ +
N’<br>’ +
N’<table border= “1″ cellpadding= “1″ cellspacing=”0″ width=”100%”>’ +
N’<tr align= center valign= middle>’ +
N’<td bgcolor=”black” width=”5%” align = “center”><font color=”white” size=2><b>TIPO</b></font></td>’ +
N’<td bgcolor=”black” width=”5%” align = “center”><font color=”white” size=2><b>DOCUMENTO</b></font></td>’ +
N’<td bgcolor=”black” width=”10%” align = “center”><font color=”white” size=2><b>FORNEC</b></font>  </td>+
N’<td bgcolor=”black” width=”5%” align = “center”><font color=”white” size=2><b>DATA</b></font></td>’ +
N’</tr>’ +

CAST (
( Select Distinct
td = [NmApl], ”
,            td = [Doc], ”
,            td = [NmFrn] , ”
,            td = [Dt]
From   [dbo].[FuFnAutorização](1, 0, 0, 0, ’20110101′, getdate(), NULL, NULL, @CdUsr, 0, 0)
                                  — Esta função acima, retorna os pedidos pendentes por autorizador (@CdUsr)
FOR XML PATH(‘tr’), TYPE
) AS NVARCHAR(MAX)
) +

N’</table>’

EXEC msdb.dbo.sp_send_dbmail
@profile_name = ‘Email’,
@recipients=@Email_Ok,
@subject = ‘Documentos Pendentes de Autorização’,
@body = @Email_Autorizacao,
@body_format = ‘HTML’

END

Ai só foi criar uma Tarefa no SQL Server, agendada para ser executada uma vez por dia, contendo o seguinte script:

exec sp_SendMail_Autoriza 24,’yuri.nonato24@meninobom.com.br’;
exec sp_SendMail_Autoriza 21,’autorizador1@meninobom.com.br’;
exec sp_SendMail_Autoriza 22,’autorizador2@meninobom.com.br’;
exec sp_SendMail_Autoriza 23,’autorizador3@meninobom.com.br’ ;
exec sp_SendMail_Autoriza 25,’autorizador5@meninobom.com.br’;

* Não foi lá estas coisas de recursivo, mas livrou de criarmos um monte de tarefas…

Abraço!

{ Alex Souza } 

MCP | MCTS: SQL Server 2008, Implementation and Maintenance
Twitter: AlexSouza_SQL