【问题标题】:Change stored procedure based on input parameters根据输入参数更改存储过程
【发布时间】:2012-10-25 18:03:20
【问题描述】:

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

论坛名称 发布的论坛中搜索 query 上一个日期

用户名

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

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

类似(伪代码)

SELECT * FROM Table WHERE Message = @query

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

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

..等等。

感谢您提供的任何帮助!

【问题讨论】:

标签: sql-server tsql search


【解决方案1】:

这应该可行:

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)

【讨论】:

  • 这种方法可能会导致性能下降,特别是如果有很多可选参数。请参阅上面 Iwo Kucharski 的评论以获得更强大的解决方案。
【解决方案2】:
  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)                                       

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
  • 2012-12-09
相关资源
最近更新 更多