De CHECK wordt na . uitgevoerd de rij is ingevoegd, zodat het bereik zichzelf overlapt.
U moet uw WHERE aanpassen om iets als:@MyTableId <> MyTableId
op te nemen .
Trouwens, je WHERE-uitdrukking kan worden vereenvoudigd.
Bereiken niet overlappen als:
- het einde van het ene bereik is voor het begin van het andere
- of begin van het ene bereik is na het einde van het andere.
Wat in SQL zou kunnen worden geschreven zoals:
WHERE @DateEnd < DateStart OR DateEnd < @DateStart
Negeer dat om de bereiken te krijgen die doen overlappen...
WHERE NOT (@DateEnd < DateStart OR DateEnd < @DateStart)
...wat volgens de wetten van De Morgan hetzelfde is als...
WHERE NOT (@DateEnd < DateStart) AND NOT (DateEnd < @DateStart)
...wat hetzelfde is als:
WHERE @DateEnd >= DateStart AND DateEnd >= @DateStart
Dus je laatste WAAR zou moeten zijn:
WHERE
@MyTableId <> MyTableId
AND @DateEnd >= DateStart
AND DateEnd >= @DateStart
[SQL Fiddle]
OPMERKING:gebruik <=
. om bereiken te "aanraken" in de startuitdrukking, die >
. zou opleveren in de uiteindelijke uitdrukking.