Исходя из моего последнего вопроса Производительность запросов к SQL Server и обнаружение, что мой метод разрешения дополнительных параметров в поисковом запросе неоптимален, есть ли у кого-нибудь рекомендации о том, как к этому подойти?
Например, скажем, у меня есть таблица приложения, таблица клиента и таблица контактных данных, и я хочу создать SP, который позволит выполнять поиск по некоторым, ни по одной или по всей фамилии, домашнему телефону, мобильному телефону и идентификатору приложения, я могу используйте что-то вроде следующего:
select *
from application a inner join customer c on a.customerid = a.id
left join contact hp on (c.id = hp.customerid and hp.contacttype = 'homephone')
left join contact mob on (c.id = mob.customerid and mob.contacttype = 'mobile')
where (a.ID = @ID or @ID is null)
and (c.Surname = @Surname or @Surname is null)
and (HP.phonenumber = @Homphone or @Homephone is null)
and (MOB.phonenumber = @Mobile or @Mobile is null)
Схема, использованная выше, нереальна, и я бы не использовал select * в сценарии реального мира, это конструкция интересующего меня предложения where. Есть ли лучший подход, динамический sql или альтернатива, которая может достичь того же результата, без необходимости использования множества вложенных условных выражений. Некоторые СП могут иметь 10–15 критериев, используемых таким образом