我正在为网络应用程序编写“高级搜索”页面。它基本上有一个形式:
在论坛论坛名称中搜索查询 最后日期
中的用户名
这个想法是,用户可以根据需要将字段留空,并且搜索不会包含该字段。
我宁愿不根据剩余值的每个可能组合写一个用于搜索的存储过程。有没有办法可以编写存储过程,以便根据传入的参数进行搜索更改是空白的?
像(伪代码)
之类的东西SELECT * FROM Table WHERE Message = @query
(if @username isn't null)
AND Username = @Username
(if @forum isn't null)
AND Forum = @forum
..等等。
感谢您提供的任何帮助!
答案 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)