Unique date range fields in SQL Server 2008

后端 未结 3 451
情歌与酒
情歌与酒 2021-01-01 02:10

I have a table that consists of, among other things, two fields named StartTime and EndTime. Both are TIME fields.

I want to add a constraint preventing the insertio

3条回答
  •  太阳男子
    2021-01-01 02:45

    This trigger will also work for situations where one timespan completely contains the other. For example, if there's an existing record for 6:00 - 9:00 and you try to insert one for 5:00 - 10:00.
    (Based on David Hall's answer)

    CREATE TRIGGER DateRangeOverlapTrigger
    ON  TargetTable
    FOR INSERT, UPDATE
    AS 
    BEGIN
    IF EXISTS
        (SELECT t.UniqueId
        FROM TargetTable t
            JOIN inserted i ON i.starttime < t.endtime
                AND i.endtime > t.starttime
                AND i.UniqueId <> t.UniqueId)
    BEGIN
        RAISERROR ('Invalid due to time overlap', 16, 1)
        IF (@@TRANCOUNT > 0)
            ROLLBACK
    END
    END
    

提交回复
热议问题