CREATE OR ALTER procedure [dbo].[FTV_M2M_JOB] as set nocount on; declare @ID int, @STATE varchar(64); declare @ERROR_NUMBER int, @COMMENT varchar(MAX); --Новые поручения declare cur cursor local fast_forward read_only for select ID from FTV_M2M M where M.STATE = 'TODO' order by M.TimeNew; open cur; while 0 = 0 begin fetch next from cur into @ID; if @@FETCH_STATUS <> 0 break; --Тут можно отправить уведомление, создать входящее сообщение и т.д. update FTV_M2M set TimeBeg = GETDATE() where ID = @ID; --Главный процесс begin try exec FTV_M2M_PROCESS_CREATE @ID; set @STATE = 'SUCCESS'; end try begin catch set @ERROR_NUMBER = ERROR_NUMBER(); set @COMMENT = ERROR_MESSAGE() + ' // ' + ERROR_PROCEDURE() + ' // ' + trim(str(ERROR_LINE())); set @STATE = 'ERROR' end catch --Тут можно уведомить об ошибочном статусе update FTV_M2M set STATE = @STATE, TimeEnd = GETDATE(), COMMENT = @COMMENT where ID = @ID; end; close cur; deallocate cur; --Новые события declare cur cursor local fast_forward read_only for select ID from FTV_M2M_EVENTS ME where ME.STATE = 'TODO' order by ME.TimeNew; open cur; while 0 = 0 begin fetch next from cur into @ID; if @@FETCH_STATUS <> 0 break; --Тут можно отправить уведомление, создать входящее сообщение и т.д. update FTV_M2M_EVENTS set TimeBeg = GETDATE() where ID = @ID; --Процесс изменения событий begin try exec FTV_M2M_PROCESS_EVENTS @ID; set @STATE = 'SUCCESS'; end try begin catch set @ERROR_NUMBER = ERROR_NUMBER(); set @COMMENT = ERROR_MESSAGE() + ' // ' + ERROR_PROCEDURE() + ' // ' + trim(str(ERROR_LINE())); set @STATE = 'ERROR' end catch --Тут можно уведомить об ошибочном статусе update FTV_M2M_EVENTS set STATE = @STATE, TimeEnd = GETDATE(), COMMENT = @COMMENT where ID = @ID; end; close cur; deallocate cur; /* тестовый блок удалён при переносе в репозиторий */