根据输入参数更改存储过程

时间:2012-07-04 22:06:09

标签: sql-server tsql search

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

  

在论坛论坛名称中搜索查询   最后日期

中的用户名

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

我宁愿不根据剩余值的每个可能组合写一个用于搜索的存储过程。有没有办法可以编写存储过程,以便根据传入的参数进行搜索更改是空白的?

像(伪代码)

之类的东西
SELECT * FROM Table WHERE Message = @query

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

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

..等等。

感谢您提供的任何帮助!

2 个答案:

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

答案 1 :(得分: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)