我有一个表,其中包含两个名为 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)