Вы можете добавить триггер или проверить ограничение к таблице.Это гарантирует, что данные соответствуют одному из условий.Для ограничения вам нужно определить пользовательскую функцию.
Однако я настоятельно не рекомендую это.Проблема с многострочными ограничениями состоит в том, что вы не можете добавить одну строку в таблицу.Это не будет соответствовать ограничению.Это может затруднить вставку новых строк и обновление существующих.
Одной из возможностей будет поворот столбцов:
id clientId needs_wid needs_ssn needsdob
139 3 1 0 0
Тогда сработает простое ограничение check
:
add constraint chk_ClientLookupTable_required
check ( (needs_wid = 1) or (needs_ssn = 1 and needsdob = 1) )
Я уверен, что вы помещаете данные в отдельные строки для большей гибкости.К сожалению, это теряет гибкость.Вы можете заменить столбцы JSON или XML, чтобы восстановить гибкость.