Спецификация, по сути, представляет собой текстовую строку, представляющую предложение "where", созданное конечным пользователем.
У меня есть хранимые процедуры, которые копируют набор связанных таблиц и записей в другие места. Операция всегда одна и та же, но зависит от некоторых сумасшедших требований пользователя, таких как «замороженные и синие продукты, поступающие в продажу во вторник».
Что если мы передадим пользовательскую спецификацию (или строковый параметр) в скалярную функцию, которая вернула истину / ложь, которая выполнила спецификацию как динамический SQL или просто exec (@variable).
Это может сказать нам, существуют ли эти записи. Мы могли бы добавить результат этой функции в наши продукты для копий where.
Это не позволит нам перекомпилировать скрипт копирования каждый раз, когда изменяются наши предложения where. Плюс это изолировало бы выбор продукта в одной функции.
Кто-нибудь когда-нибудь делал что-нибудь подобное или есть примеры? Что плохого может из этого получиться?
EDIT:
Это спецификация, которую я просто добавил в конец каждого оператора вставки / выбора:
and exists (
select null as nothing
from SameTableAsOutsideTable inside
where inside.ID = outside.id and -- Join operations to outside table
inside.page in (6, 7) and -- Criteria 1
inside.dept in (7, 6, 2, 4) -- Criteria 2
)
Было бы замечательно передать параметр в функцию, которая создает записи на основе пользовательских критериев, поэтому все вышеперечисленное может выглядеть примерно так:
and dbo.UserCriteria( @page="6,7", @dept="7,6,2,4")