Вы можете создать хранимую процедуру, которая проверяет пропущенные записи.Процедура может вызвать raiserror
для сбоя задания.Например:
if OBJECT_ID('CheckBuildingEntries') is null
exec ('create procedure CheckBuildingEntries as select 1')
go
alter procedure CheckBuildingEntries(
@check_date datetime)
as
declare @missing_buildings int
select @missing_buildings = COUNT(*)
from Buildings as b
left join
YourTable as yt
on yt.Building = b.name
and dateadd(dd,0, datediff(dd,0,yt.RawDate)) =
dateadd(dd,0, datediff(dd,0,@check_date))
where yt.Building is null
if @missing_buildings > 0
begin
raiserror('OMG!', 16, 0)
end
go
Пример запланированного задания, выполняемого в 4 часа утра для проверки вчерашних записей:
declare @yesterday datetime
set @yesterday = dateadd(day, -1, GETDATE())
exec CheckBuildingEntries @yesterday
Если запись отсутствует, задание будет неудачным.Вы можете настроить его, чтобы отправить вам электронное письмо.
Тестовые таблицы:
create table Buildings (id int identity, name varchar(50))
create table YourTable (Employee varchar(50), RawDate datetime,
Building varchar(50))
insert into Buildings (name)
select '2'
union all select '9'
union all select '12'
union all select 'EA'
union all select '30'
insert into YourTable (Employee, RawDate, Building)
select 'Bob', '2010-07-22 06:04:00.000', '2'
union all select 'Sally', '2010-07-22 01:00:00.000', '9'
union all select 'Jane', '2010-07-22 06:04:00.000', '12'
union all select 'Alex', '2010-07-22 05:54:00.000', 'EA'
union all select 'Vince', '2010-07-22 07:59:00.000', '30'