KONTROLA jest wykonywana po wiersz został wstawiony, więc zakres nakłada się na siebie.
Musisz zmienić WHERE tak, aby zawierał coś takiego:@MyTableId <> MyTableId
.
BTW, twoje wyrażenie WHERE można uprościć.
Zakresy nie nakładają się, jeśli:
- koniec jednego zakresu jest przed początkiem drugiego
- lub początek jednego zakresu następuje po końcu drugiego.
Które można napisać w SQL, tak jak:
WHERE @DateEnd < DateStart OR DateEnd < @DateStart
Odrzuć to, aby uzyskać zakresy, które wykonują nakładają się...
WHERE NOT (@DateEnd < DateStart OR DateEnd < @DateStart)
...co zgodnie z prawami De Morgana jest tym samym, co...
WHERE NOT (@DateEnd < DateStart) AND NOT (DateEnd < @DateStart)
...czyli to samo co:
WHERE @DateEnd >= DateStart AND DateEnd >= @DateStart
Więc twoje ostateczne GDZIE powinno być:
WHERE
@MyTableId <> MyTableId
AND @DateEnd >= DateStart
AND DateEnd >= @DateStart
[Skrzypce SQL]
UWAGA:aby zezwolić zakresom na „dotyk”, użyj <=
w wyrażeniu początkowym, co spowoduje powstanie >
w ostatecznym wyrażeniu.