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 に答える