Выполнять поиск только с заполненными текстовыми полями - PullRequest
0 голосов
/ 27 мая 2019

У меня есть панель поиска с различными параметрами поиска, я хочу, чтобы запрос SQL выполнял поиск только с заполненными текстовыми полями

Я сделал простой SP, который работал нормально, когда у меня была панель поиска только с двумя параметрами поиска (Имя и Код), использующими операторы if (не лучшая практика). Однако теперь, когда у меня был поиск bbars с 4-5 элементами, операторы IF не кажутся наилучшей практикой для производительности

Это процедура, которую я сделал для случая, когда у меня было только 2 варианта поиска:

@Code_client nvarchar(50),
@Intitule_client varchar(100)
as 
IF (@Code_client is not NULL AND @Code_client!='')
   BEGIN
   IF (@Intitule_client IS not NULL AND @Intitule_client!='')
      select * from Clients where Code_client=@Code_client and Intitule_client=@Intitule_client
   ELSE
      select * from Clients where Code_client=@Code_client
   END
ELSE IF (@Intitule_client is not null AND @Intitule_client!='')
    BEGIN
    select * from Clients where Intitule_client=@Intitule_client
    END

Но для этого случая у меня есть 4 варианта поиска:

<div id="chercher_employe" class="Rechercher">
                <ul>
                    <li>
                        <asp:TextBox runat="server" ID="chercher_employe_Nom" CssClass="Input" placeholder="Nom employe"></asp:TextBox>
                    </li>

                    <li>
                        <asp:TextBox runat="server" ID="chercher_employe_Departement" CssClass="Input" placeholder="Departement"></asp:TextBox>
                    </li>

                    <li>
                        <asp:TextBox runat="server" ID="chercher_employe_occupation" CssClass="Input" placeholder="Occupation"></asp:TextBox>
                    </li>

                    <li>
                        <asp:TextBox runat="server" ID="chercher_employe_IntituleProfil" CssClass="Input" placeholder="Profil"></asp:TextBox>
                    </li>

                    <li>
                        <asp:LinkButton runat="server" CssClass="button">  <i class="fas fa-search"></i> </asp:LinkButton>
                    </li>
                </ul>
            </div>

Я не могу найти другой способ, кроме использования операторов if с C # или SQL, какие-либо предложения, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

@ Предложение Ларну и @jarlh - это то, что лучше всего сработало для меня.Эта ссылка объясняет это очень хорошо: https://blogs.sentryone.com/aaronbertrand/backtobasics-updated-kitchen-sink-example/

Спасибо всем за ваши ответы, ценю это :)

(Пожалуйста, напишите ваш ответ здесь, чтобы я мог принять его, если у кого-то было то же самоепроблема ^^)

0 голосов
/ 27 мая 2019

Оператор if является не более чем логическим следствием

a -> b если a, то b

, который также можно записать как

!a or b не а или б

Итак, ваше заявление if

IF (@Intitule_client IS not NULL AND @Intitule_client!='')
      select * from Clients where Code_client=@Code_client and Intitule_client=@Intitule_client

можно перевести на (используя законы де Моргана для упрощения двойного отрицания (not(a or b) <=> not(a) and not(b))

SELECT * 
FROM Clients
WHERE (@Intitule_client IS NULL OR @Intitule_client = '' OR Intitule_client = @Intitule_client) AND Code_client = @Code_client

Затем вы можете использовать этот шаблон для построения более сложных запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...