El CHECK se está ejecutando después la fila se ha insertado, por lo que el rango se superpone consigo mismo.
Deberá modificar su DONDE para incluir algo como:@MyTableId <> MyTableId
.
Por cierto, tu expresión WHERE se puede simplificar.
Los rangos no superposición si:
- el final de un rango está antes del comienzo del otro
- o el comienzo de un rango es posterior al final del otro.
Que podría escribirse en SQL como:
WHERE @DateEnd < DateStart OR DateEnd < @DateStart
Niéguelo para obtener los rangos que hacen superposición...
WHERE NOT (@DateEnd < DateStart OR DateEnd < @DateStart)
...que según las leyes de De Morgan es lo mismo que...
WHERE NOT (@DateEnd < DateStart) AND NOT (DateEnd < @DateStart)
...que es lo mismo que:
WHERE @DateEnd >= DateStart AND DateEnd >= @DateStart
Así que tu DÓNDE final debería ser:
WHERE
@MyTableId <> MyTableId
AND @DateEnd >= DateStart
AND DateEnd >= @DateStart
[Violín SQL]
NOTA:para permitir que los rangos se "toquen", use <=
en la expresión inicial, lo que produciría >
en la expresión final.