Как насчет check(COALESCE(Parent1ID, Parent2ID) IS NOT NULL)
- это гарантирует, что хотя бы один из них установлен, но для выполнения отрицательной проверки я не могу придумать быстрого решения.
Если подумать, как насчет: (предупреждение - не намного короче)
check(
CASE WHEN Parent1ID IS NULL THEN 0 ELSE 1 END
+ CASE WHEN Parent2ID IS NULL THEN 0 ELSE 1 END
+ CASE WHEN Parent3ID IS NULL THEN 0 ELSE 1 END
+ CASE WHEN Parent4ID IS NULL THEN 0 ELSE 1 END
= 1
)