A esta altura del partido, sin duda, un clasico de la automatizacion de procesos en SQL Server.
Antes que nada, no se olviden de configurar el outlook en el server para que funcione ;P
Lo mas practico es poner el siguente codigo en el step de un job recurrente, digamos cada 15 minutos, de tipo Transact-SQL script (T-SQL).
Ahora si, sin mas preambulo, el codigo:
declare @debug int set @debug = 0
DECLARE @status int,
@id varchar(255),
@query varchar(255),
@Error int
declare @sender_address nvarchar(255), @MSG varchar(8000), @Res varchar(8000)
set @MSG=''
set @Error = 0
EXEC @status = master.dbo.xp_findnextmsg @unread_only = 'TRUE',
@msg_id = @id OUTPUT
if @debug = 1
select @status , @id id
IF @status = 0 and @id <> ''
BEGIN
EXEC @status = master.dbo.xp_readmail @msg_id = @id,
@subject = @query OUTPUT,
@originator_address = @sender_address OUTPUT
if @debug = 1
select @status status, @query query
IF @status = 0 AND @query <> ''
BEGIN
SET @query = LTRIM(RTRIM(@query))
SELECT @QUERY 'QUERY SACAR'
if exists (SELECT 1 from msdb.dbo.sysjobs where name = @query)
begin
EXEC msdb..sp_start_job @job_name=@query
end
else
begin
select @MSG = 'Job inexistente: ' + @query
end
if @debug = 1
select @MSG MSG
if @MSG <> ''
begin
set @sender_address = @sender_address + N';'
SELECT @MSG = @MSG + char(10) + char(13) + message --*
from msdb.dbo.sysjobs j inner join msdb.dbo.sysjobhistory h
on h.job_id = j.job_id
where h.run_status = 0
and name = @query
order by instance_id
if @debug = 1
select @sender_address sender_address, @query query
set @Res = 'RE: ' + @query
Exec master.dbo.xp_sendmail @recipients = N'SQLAdmin@xxx.com'
,@message = @MSG
,@subject = @Res
,@no_output = true -- EN DEBUG COMENTAR ESTA LINEA
end
END
EXEC master.dbo.xp_deletemail @id
END
if @debug = 1
select 'ok'
