我有一个表,该表除其他外包括两个名为StartTime和EndTime的字段。两者都是“时间”字段。
我想添加一个约束,以防止插入与预先存在的时间范围重叠的任何记录。例如,如果一条记录已经存在,且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