исключительная дуга в tsql - ограничение для проверки одного из столбцов не является нулевым - PullRequest
1 голос
/ 28 июля 2011

Я реализую исключительный образец дуги разрешения нескольких родителей для данной таблицы.Я написал приведенное ниже ограничение проверки уровня таблицы для использования в SQL Server 2008. Проблема с этим, если имеется 3 столбца, запрос становится намного больше.Есть ли лучше сделать это?

check( 
(Parent1Id is null AND Parent2Id is not null) 
OR  (Parent1Id is not null AND Parent2Id is null))

1 Ответ

2 голосов
/ 28 июля 2011

Как насчет 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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...