我有以下查询
SELECT FullUrl
,Title
,NextWebGroupId
,TimeCreated
FROM AllWebsTest
WHERE (Title LIKE '%' + @Title + '%')
OR (FullUrl LIKE '%' + @FullUrl + '%')
Title和FullURL是TextBox的参数。
我期待的是,
如何处理空白文本框,以便只将搜索词放在其中一个框中才能返回结果。
如果我直接在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>
答案 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 + '%')