Ejecutar Jobs por mail, SQL 2000

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'