Что вы можете сделать, это сравнить таблицу с самим собой в объединении.Ниже приведен пример того, как это сделать.Я закомментировал несколько строк.Раскомментируйте их, чтобы увидеть прогресс в работе с различными делами.
edit: Если вам нужно это как ограничение для самой таблицы, вы должны использовать триггер.
edit2: Для SQL 2005 замените синтаксис вставки отдельными операторами вставки.
Удачи,
GJ
declare @event table (
Id int,
Start DateTime,
Stop DateTime
)
insert @event (Id, Start, Stop)
values (1, '2010-08-01', '2010-08-02')
,(2, '2010-08-04', '2010-08-06')
,(3, '2010-08-05', '2010-08-08') -- start fals within event 2
--,(4, '2010-01-01', '2010-12-31') -- overlaps with all of them
--,(5, '2010-08-01', '2010-08-02') -- equal to event 1
select *
from @event e1
inner join @event e2
on e1.Id != e2.Id -- do not compare to itself
and e2.Start >= e1.Start -- events that have a start date
and e2.Start <= e1.Stop