Вот упрощенная версия проблемы, которую я пытаюсь решить.
У меня есть временная таблица #MyData
с двумя столбцами: description
и value
.
У меня также есть таблицы MyRuleSequenceCollection
, MyRuleSequence
и MyRule
, которые я хочу использовать для оценки данных во временной таблице.MyRuleSequence
- это упорядоченный список MyRule
записей, а MyRuleSequenceCollection
- неупорядоченный набор MyRuleSequence
записей.
Одна из последовательностей ищет записи во временной таблице с описаниями "A" и«B», затем пытается разделить A на B. Первое правило проверяет наличие A, если его там нет, процесс должен остановиться.Второе правило проверяет наличие B, если его там нет, процесс должен остановиться.Третье правило проверяет, что B не равно 0, если это 0, процесс должен остановиться.Наконец, 4-е правило делит A на B и проверяет, больше ли результата 1.
Временная таблица содержит:
A 20
B 5
Результат: все 4 оцененных правила, окончательный результат true
Временная таблица содержит:
A 20
B 0
Результат: выполняется только первые 3 правила, ошибка без деления на 0, окончательный результат false
Временная таблица содержит:
B 20
C 5
Результат: запускается только первое правило, конечный результат - ложь
Единственный способ, с помощью которого я могу это представить, - использовать курсоры или, что еще хуже, динамический SQL.
Поэтому я ищу дизайнерские предложения.Учитывая вышеизложенное в качестве примера (многие случаи гораздо сложнее), может ли этот процесс быть разработан, чтобы избежать использования курсоров или динамического SQL?Может ли рекурсия быть решением проблемы?
Обновление: несколько дней без предложений и предложений.У кого-нибудь есть мнение об использовании CTE для этого?Или это просто курсор с обработкой освобождения для вас?