Solución:
Actualmente, SQL Server no admite subconsultas para CHECK CONSTRAINT.
Como ha descubierto, puede haber problemas con las restricciones CHECK que involucran UDF al intentar eludir la limitación de subconsultas.
Las estrategias alternativas de implementación de restricciones son procedimental desencadenado y procedimiento incrustado. Se prefiere el primero porque, al igual que las restricciones declarativas, no se pueden eludir.
Implementar una estrategia de procedimiento activada que esté bien optimizada y maneje los problemas de concurrencia no es trivial, pero aún es factible. Recomiendo encarecidamente el libro Matemáticas aplicadas para profesionales de bases de datos de Lex de Haan, Toon Koppelaars, capítulo 11 (los ejemplos de código son Oracle pero se pueden migrar fácilmente a SQL Server).
Como ya han mencionado otros, este tipo de restricciones de comprobación aún no está implementado en SQL-Server. Además de los desencadenantes, también puede examinar la posibilidad de cambiar el diseño de la tabla.
Una posible alternativa incluye almacenar la fecha de finalización del intervalo anterior en cada fila. Consulte Almacenamiento de intervalos de tiempo sin superposiciones para obtener más detalles. Las restricciones de aplicación son simples, pero hay complicaciones en la forma en que tendrá que lidiar con las inserciones / eliminaciones / actualizaciones en la mesa.
Otra posibilidad sería almacenar no una fila (con la fecha de inicio y finalización) para un descuento como lo hace ahora, sino una serie completa de filas (una para cada fecha del intervalo de descuento). Las restricciones de aplicación serán aún más simples, pero tendrá muchas filas en lugar de cada una de su tabla actual.