仅使用填充的文本框执行搜索

时间:2019-05-27 11:52:23

标签: c# sql asp.net sql-server

我有一个带有不同搜索选项的搜索栏,我希望SQL查询仅使用填充的文本框进行搜索

我制作了一个简单的SP,当我有一个仅带有两个使用if语句的搜索选项(名称和代码)的搜索栏时,效果很好(不是最佳实践)。但是,既然我已经搜索了包含4-5个元素的bbar,那么IF语句似乎就不是提高性能的最佳实践

这是针对只有两个搜索选项的情况下执行的过程:

@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 :(得分:0)

if语句无非是逻辑含义

a -> b如果是a则b

也可以写为

!a or b不是a或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

然后您可以使用此模式来构建更复杂的查询。

答案 1 :(得分:0)

@Larnu和@jarlh命题最适合我。 该链接很好地说明了这一点:  https://blogs.sentryone.com/aaronbertrand/backtobasics-updated-kitchen-sink-example/

谢谢大家的回答,谢谢:)

(请在这里写下您的答案,这样,如果有人遇到同样的问题,我可以接受它^^)