ПРОВЕРКАТА се изпълняваслед редът е вмъкнат, така че диапазонът се припокрива със самия себе си.
Ще трябва да промените своето WHERE, за да включите нещо като:@MyTableId <> MyTableId
.
BTW, вашият израз WHERE може да бъде опростен.
Диапазоните не припокриване, ако:
- краят на единия диапазон е преди началото на другия
- или началото на единия диапазон е след края на другия.
Което може да бъде написано на SQL като:
WHERE @DateEnd < DateStart OR DateEnd < @DateStart
Отричайте това, за да получите диапазоните, които правят припокриване...
WHERE NOT (@DateEnd < DateStart OR DateEnd < @DateStart)
...което според законите на Де Морган е същото като...
WHERE NOT (@DateEnd < DateStart) AND NOT (DateEnd < @DateStart)
...което е същото като:
WHERE @DateEnd >= DateStart AND DateEnd >= @DateStart
Така че окончателното ви КЪДЕ трябва да бъде:
WHERE
@MyTableId <> MyTableId
AND @DateEnd >= DateStart
AND DateEnd >= @DateStart
[SQL Fiddle]
ЗАБЕЛЕЖКА:за да позволите на диапазони да се „докосват“, използвайте <=
в началния израз, който би произвел >
в крайния израз.