Dav*_*fer 5 sql sql-server sql-server-2008
我有一个表,其中包括名为StartTime和EndTime的两个字段.两者都是TIME字段.
我想添加一个约束,以防止插入任何与预先存在的时间范围重叠的记录.例如,如果已存在StartTime = 5:00,EndTime = 10:00的记录,我希望插入时StartTime = 6:00,EndTime = 9:00因重叠而失败.
有没有办法实现这一点,有没有触发器?
下面的触发器应该可以工作 - 也可以使用检查约束来执行此操作,但是这个帖子中显示的逻辑会伤害我的头脑.
CREATE TRIGGER [dbo].[DateRangeTrigger]
ON [dbo].[TargetTable]
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS (SELECT t.starttime, t.endtime FROM TargetTable t
Join inserted i
On (i.starttime > t.starttime AND i.starttime < t.endtime AND i.UniqueId <> t.UniqueId)
OR (i.endtime < t.endtime AND i.endtime > t.starttime AND i.UniqueId <> t.UniqueId)
OR (i.starttime < t.starttime AND i.endtime > t.endtime AND i.UniqueId <> t.UniqueId)
)
BEGIN
RAISERROR ('Inserted date was within invalid range', 16, 1)
IF (@@TRANCOUNT>0)
ROLLBACK
END
END
Run Code Online (Sandbox Code Playgroud)