SQL Where、LIKE或组合问题与空白文本框
我有以下问题SQL Where、LIKE或组合问题与空白文本框,sql,asp.net,sql-server,Sql,Asp.net,Sql Server,我有以下问题 SELECT FullUrl ,Title ,NextWebGroupId ,TimeCreated FROM AllWebsTest WHERE (Title LIKE '%' + @Title + '%') OR (FullUrl LIKE '%' + @FullUrl + '%') 标题和完整URL是通过文本框设置的参数 我所期望的是 若我把文本放在标题文本框中进行搜索,它不会给出任何结果,只有在FullURL文本框中放入一些字符串甚至空格,
SELECT FullUrl
,Title
,NextWebGroupId
,TimeCreated
FROM AllWebsTest
WHERE (Title LIKE '%' + @Title + '%')
OR (FullUrl LIKE '%' + @FullUrl + '%')
标题和完整URL是通过文本框设置的参数
我所期望的是
<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>
尝试此查询:
SELECT FullUrl
,Title
,NextWebGroupId
,TimeCreated
FROM AllWebsTest
WHERE (Title LIKE '%' + ISNULL(@Title, '') + '%')
AND (FullUrl LIKE '%' + ISNULL(@FullUrl, '') + '%')
看看这个,确认这个行为是你所期望的
此查询仅在将值传递给变量之一时过滤行,@title
或@fullURL
(并返回与条件匹配的行)。否则它将返回所有结果
在您最近的评论后更新:
SELECT FullUrl
,Title
,NextWebGroupId
,TimeCreated
FROM AllWebsTest
WHERE (Title LIKE '%' + ISNULL(LTRIM(@Title), '') + '%')
AND (FullUrl LIKE '%' + ISNULL(LTRIM(@FullUrl), '') + '%')
下面是一个关于上述代码如何工作的示例。最有可能的情况是使用了
NULL
而不是空字符串,从而导致出现的标题,如NULL
,这将失败。请尝试以下操作,显式检查null大小写:
SELECT FullUrl, Title, NextWebGroupId, TimeCreated
FROM AllWebsTest
WHERE (@Title IS NULL OR Title LIKE '%' + @Title + '%')
OR (@FullUrl IS NULL OR FullUrl LIKE '%' + @FullUrl + '%')
试试这个
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
如果传递的字符串为null或空,请尝试与标题一起检查
SELECT FullUrl
,Title
,NextWebGroupId
,TimeCreated
FROM AllWebsTest
WHERE ( ISNULL(@Title,'') != '' AND Title LIKE '%' + @Title + '%')
OR (ISNULL(@FullUrl,'') != '' AND FullUrl LIKE '%' + @FullUrl + '%')
我不确定这是否会过滤任何内容,因为如果您不将值传递给这两个变量中的一个,假设您只传递
@title
的值,那么或(@FullURL为NULL或…
将始终为真,因此返回所有行()尝试了此操作,但仍然没有使用单框搜索词的结果。请参阅更新的问题。@这是完全相同的查询吗?在WHERE
子句的两个条件之间使用和而不是或?是..这正是预期的行为。但放置和正在执行,如果两个框中的文本匹配,则返回结果,否则为空。真的不确定,为什么它对我不起作用。与或
相反,在WHERE
子句的两个条件之间,使用单个文本框可以很好地工作,和
可以使它在为两个变量指定值时正常工作。但是将ISNULL
应用于变量也会为查询生成或
效果,因此您不会丢失此案例。我想我可能已经发现了问题,因此textbox返回空字符串,我们正在检查null值。即使用空字符串测试你的小提琴,它也不能用。因此,与上述要求相同,但字符串为空。是否有任何一个语句可以处理所有组合?请尝试使用SQL Server Profiler查看从应用程序发送并在服务器上执行的查询。然后,如果需要,我们可以回溯并进行更正..我最终将query is aspx.cs文件改为direct。欢迎您,感谢您通知我们您的最终解决方案。