SQL Server ne prend actuellement pas en charge les sous-requêtes pour CHECK. CONTRAINTES .
Comme vous l'avez découvert, il peut y avoir problème avec les contraintes CHECK impliquant des UDF lors d'une tentative de contournement de la limitation de sous-requête.
Les stratégies alternatives de mise en œuvre des contraintes sont procédurales déclenchées et procédure intégrée . La première est préférée car, comme les contraintes déclaratives, elles ne peuvent pas être contournées.
La mise en œuvre d'une stratégie procédurale déclenchée qui est bien optimisée et qui gère les problèmes de concurrence n'est pas triviale mais reste faisable. Je recommande fortement le livre Mathématiques appliquées pour les professionnels des bases de données Par Lex de Haan, Toon Koppelaars , chapitre 11 (les exemples de code sont Oracle mais peuvent être facilement portés sur SQL Server).