Der CHECK wird nach ausgeführt Die Zeile wurde eingefügt, sodass sich der Bereich mit sich selbst überlappt.
Sie müssen Ihr WHERE so ändern, dass es Folgendes enthält:@MyTableId <> MyTableId
.
Übrigens, Ihr WHERE-Ausdruck kann vereinfacht werden.
Bereiche nicht überlappen, wenn:
- Ende des einen Bereichs liegt vor Beginn des anderen
- oder Beginn des einen Bereichs ist nach dem Ende des anderen.
Was in SQL geschrieben werden könnte wie:
WHERE @DateEnd < DateStart OR DateEnd < @DateStart
Negieren Sie das, um die Bereiche zu erhalten, die tun überlappen...
WHERE NOT (@DateEnd < DateStart OR DateEnd < @DateStart)
...was nach den Gesetzen von De Morgan dasselbe ist wie...
WHERE NOT (@DateEnd < DateStart) AND NOT (DateEnd < @DateStart)
...was dasselbe ist wie:
WHERE @DateEnd >= DateStart AND DateEnd >= @DateStart
Ihr letztes WO sollte also sein:
WHERE
@MyTableId <> MyTableId
AND @DateEnd >= DateStart
AND DateEnd >= @DateStart
[SQL-Geige]
HINWEIS:Um zuzulassen, dass sich Bereiche berühren, verwenden Sie <=
im Startausdruck, was >
erzeugen würde im letzten Ausdruck.