CHECK udføres efter rækken er blevet indsat, så området overlapper med sig selv.
Du skal ændre dit WHERE for at inkludere noget som:@MyTableId <> MyTableId
.
BTW, dit WHERE-udtryk kan forenkles.
Områder ikke overlapper hvis:
- slutningen af det ene område er før starten af det andet
- eller starten af det ene område er efter slutningen af det andet.
Som kunne skrives i SQL som:
WHERE @DateEnd < DateStart OR DateEnd < @DateStart
Ophæv det for at få de områder, der gør overlap...
WHERE NOT (@DateEnd < DateStart OR DateEnd < @DateStart)
...hvilket ifølge De Morgans love er det samme som...
WHERE NOT (@DateEnd < DateStart) AND NOT (DateEnd < @DateStart)
...hvilket er det samme som:
WHERE @DateEnd >= DateStart AND DateEnd >= @DateStart
Så din endelige WHERE bør være:
WHERE
@MyTableId <> MyTableId
AND @DateEnd >= DateStart
AND DateEnd >= @DateStart
[SQL violin]
BEMÆRK:Brug <=
for at tillade områder at "røre". i startudtrykket, som ville producere > i det endelige udtryk.