KONTROLLEN körs efter raden har infogats, så intervallet överlappar sig självt.
Du måste ändra din WHERE för att inkludera något som:@MyTableId <> MyTableId
.
BTW, ditt WHERE-uttryck kan förenklas.
Områden gör det inte överlappar om:
- slutet av det ena intervallet är före början av det andra
- eller början av det ena intervallet är efter slutet av det andra.
Som skulle kunna skrivas i SQL som:
WHERE @DateEnd < DateStart OR DateEnd < @DateStart
Negera det för att få de intervall som gör överlappar...
WHERE NOT (@DateEnd < DateStart OR DateEnd < @DateStart)
...vilket enligt De Morgans lagar är detsamma som...
WHERE NOT (@DateEnd < DateStart) AND NOT (DateEnd < @DateStart)
...vilket är samma sak som:
WHERE @DateEnd >= DateStart AND DateEnd >= @DateStart
Så din sista VAR bör vara:
WHERE
@MyTableId <> MyTableId
AND @DateEnd >= DateStart
AND DateEnd >= @DateStart
[SQL-fiol]
OBS:för att tillåta intervall att "berörda", använd <=
i startuttrycket, vilket skulle producera >
i det slutliga uttrycket.