如果条目的日期范围已经存在,则在插入时验证记录并限制插入

Validating record on insert and restricting insert if the date range of entry already exists

我的Table结构如下

select * from Table_name

Name     Start_Date      End_Date
XXY      14-FEB-2016     3-MAR-2016
XXD      21-JAN-2016     1-FEB-2016
XXY      18-FEB-2016     3-MAR-2016
XXD      21-JAN-2016     1-FEB-2016
XXD      22-JAN-2016     1-FEB-2016

数据存在同名日期范围重叠的问题。

For example, XXY

XXY      18-FEB-2016     3-MAR-2016

无效,因为 start_date 在现有记录的日期范围内

XXY      14-FEB-2016     3-MAR-2016

objective 是为了限制记录的插入,如果它 start_date 位于同名的任何现有记录之间。

您可以使用以下查询:

DECLARE @from DATE = '2016-02-10'
DECLARE @to DATE = '2016-02-12'

INSERT INTO mytable (Name, Start_Date, End_Date)
SELECT Name, start_date, end_date
FROM (VALUES ('XXY', @from, @to)) AS t(Name, start_date, end_date)
WHERE NOT EXISTS (SELECT 1
                  FROM mytable AS m
                  WHERE m.name = t.Name AND 
                  (t.start_date <= m.End_Date AND t.end_date >= m.Start_Date))

要插入的值用于构造内联 table 和 VALUES table 值构造函数。使用 NOT EXISTS 我们可以过滤掉任何重叠的行,只保留不重叠的行。

Demo here