1

我正在为 Web 应用程序编写一个“高级搜索”页面。它基本上有一个形式:

在用户名最近日期发布 的论坛论坛名称中搜索查询

这个想法是用户可以根据需要将字段留空,并且搜索不会包含它。

我宁愿不编写基于将值留空的所有可能组合进行搜索的存储过程。有没有办法可以编写存储过程,以便根据传入的参数更改搜索是否为空白?

类似的东西(伪代码)

SELECT * FROM Table WHERE Message = @query

(if @username isn't null)
AND Username = @Username

(if @forum isn't null)
AND Forum = @forum

..等等。

感谢您的任何帮助,您可以提供!

4

2 回答 2

2

这应该有效:

SELECT *
FROM YourTable
WHERE   (Message = @query OR @query IS NULL)
AND     (Forum = @forum OR @forum IS NULL)
AND     (Username = @username OR @username IS NULL)
AND     (LastDate = @lastdate OR @lastdate IS NULL)
于 2012-07-04T22:29:40.133 回答
1
  CREATE Proc [dbo].[sp_sarch_with_filter]                   
  @param1 varchar(50)=NULL,                                
  @param2 varchar(50)=NULL,                                
  @param3 varchar(50)=NULL,                                

  AS                                  
  Begin                                                                  

  Declare @dynamicsql varchar(max)                  



  Set @dynamicsql='select  * from tabelName where 1=1'                               


  if(@param1 is not null and @param1  <> '')                  
  Set @dynamicsql=@dynamicsql+' and col1 like''%'+@param1 +'%'''                  

  if(@param2 is not null and @param2  <> '')                  
  Set @dynamicsql=@dynamicsql+' and col2 like''%'+@param2 +'%'''                  

  if(@param3 is not null and @param3  <> '')                  
  Set @dynamicsql=@dynamicsql+' and col3 like''%'+@param3 +'%'''                  


  Set @dynamicsql=@dynamicsql+' Order by col4 Desc'

  Print @dynamicsql                  

  Execute(@dynamicsql)                                       
于 2012-07-05T06:02:39.300 回答