SQL Where,LIKE或与Blank textBox的组合问题

时间:2015-08-11 07:00:21

标签: sql asp.net sql-server

我有以下查询

SELECT FullUrl
    ,Title
    ,NextWebGroupId
    ,TimeCreated
FROM AllWebsTest
WHERE (Title LIKE '%' + @Title + '%')
    OR (FullUrl LIKE '%' + @FullUrl + '%')

Title和FullURL是TextBox的参数。

我期待的是,

  1. 如果我在“标题”文本框和搜索中放置文本,它不会给出任何结果,只有当我在FullURL文本框中放入一些字符串甚至空格时,才会得到结果。
  2. 反之亦然 - 如果标题为空白(也没有空格),我将搜索词放在fullurl文本框中,我得不到任何结果。
  3. 如何处理空白文本框,以便只将搜索词放在其中一个框中才能返回结果。

    如果我直接在SQL服务器中查询,这工作正常。但是通过asp.net webform,它给出了问题。

    Update1:​​我尝试了下面的解决方案,而逻辑上它应该可以工作,如果其中一个文本框没有被触及,我仍然没有得到结果。有特殊性质的问题吗?以下是确切的标记

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>" SelectCommand="SELECT FullUrl, Title, NextWebGroupId, TimeCreated FROM AllWebsTest WHERE (Title LIKE '%' + ISNULL(@Title, '') + '%') OR (FullUrl LIKE '%' + ISNULL(@FullUrl, '') + '%')">
                <SelectParameters>
                    <asp:ControlParameter ControlID="txtSearch" Name="Title" PropertyName="Text" Type="String" />
                    <asp:ControlParameter ControlID="Textsearch2" Name="FullUrl" PropertyName="Text" Type="String" />
                </SelectParameters>
            </asp:SqlDataSource>
    

4 个答案:

答案 0 :(得分:1)

尝试此查询:

SELECT FullUrl
    ,Title
    ,NextWebGroupId
    ,TimeCreated
FROM AllWebsTest
WHERE (Title LIKE '%' + ISNULL(@Title, '') + '%')
    AND (FullUrl LIKE '%' + ISNULL(@FullUrl, '') + '%')

查看此SQLFiddle并确认此行为符合您的预期。

此查询仅在将值传递给您的某个变量@title@fullURL(并返回与条件匹配的变量)时才会过滤行。否则它将返回所有结果。

在您最近的评论后更新:

SELECT FullUrl
    ,Title
    ,NextWebGroupId
    ,TimeCreated
FROM AllWebsTest
WHERE (Title LIKE '%' + ISNULL(LTRIM(@Title), '') + '%')
    AND (FullUrl LIKE '%' + ISNULL(LTRIM(@FullUrl), '') + '%')

以下是SQLFiddle,其中包含上述代码的工作原理。

答案 1 :(得分:1)

最常见的事情是使用NULL而不是空字符串,导致WHERE Title LIKE NULL失败。请尝试以下方法,显式检查null case:

SELECT FullUrl, Title, NextWebGroupId, TimeCreated
FROM AllWebsTest 
WHERE (@Title IS NULL OR Title LIKE '%' + @Title + '%')
OR (@FullUrl IS NULL OR FullUrl LIKE '%' +  @FullUrl + '%')

答案 2 :(得分:0)

试试这个

Create proc search
 @Title varchar(20) = null,
@FullUrl varchar(20)=  null, 
as
begin
 SELECT FullUrl
    ,Title
    ,NextWebGroupId
    ,TimeCreated
FROM AllWebsTest
WHERE (@Title = null or Title LIKE '%' + @Title + '%')
    OR (@FullUrl = null or FullUrl LIKE '%' + @FullUrl + '%') 
end

答案 3 :(得分:0)

如果传递的字符串为null或为空,请尝试检查标题。

SELECT FullUrl
    ,Title
    ,NextWebGroupId
    ,TimeCreated
FROM AllWebsTest
WHERE ( ISNULL(@Title,'') != '' AND Title LIKE '%' + @Title + '%')
    OR (ISNULL(@FullUrl,'') != '' AND FullUrl LIKE '%' + @FullUrl + '%')