O CHECK está sendo executado depois a linha foi inserida, então o intervalo se sobrepõe a si mesmo.
Você precisará alterar seu WHERE para incluir algo como:
@MyTableId <> MyTableId
. BTW, sua expressão WHERE pode ser simplificada.
Intervalos não se sobrepõem se:
- o fim de um intervalo é anterior ao início do outro
- ou o início de um intervalo é posterior ao final do outro.
Que poderia ser escrito em SQL como:
WHERE @DateEnd < DateStart OR DateEnd < @DateStart
Negue isso para obter os intervalos que fazem sobreposição...
WHERE NOT (@DateEnd < DateStart OR DateEnd < @DateStart)
...que de acordo com as leis de De Morgan é o mesmo que...
WHERE NOT (@DateEnd < DateStart) AND NOT (DateEnd < @DateStart)
...que é o mesmo que:
WHERE @DateEnd >= DateStart AND DateEnd >= @DateStart
Então, seu final WHERE deve ser:
WHERE
@MyTableId <> MyTableId
AND @DateEnd >= DateStart
AND DateEnd >= @DateStart
[Fiddle SQL]
OBSERVAÇÃO:para permitir que os intervalos "toquem", use
<=
na expressão inicial, que produziria >
na expressão final.