2016-07-23 21 views
0

私は5つの異なるフィルタを持つ検索画面用のストアドプロシージャを持っています。 ユーザーはフィルタを空のままにしたり、1つのフィルタを使用して検索ボタンをクリックすることができます。フィールド値が空の場合、where句の列を除外します。

すべてのデータはデータベースから来ていますが、パラメータ値が空の文字列の場合はwhere節の列を除外できるストアドプロシージャを作成しようとしています。

@Id as nvarchar(256) = 1 
@blnIsinProgress bit = 0 
@strStatus varchar(20) = '' 
@strName varchar(50) = '' 
@strConfirmationNumber varchar(50) = 123 
@dtmSubmittedFrom Date = '12/31/9999' 
@dtmSubmittedTo Date = '12/31/9999' 
as 
BEGIN 
SELECT * 
    FROM tblTable 
    WHERE 
    (@Id IS NULL OR lngID = @Id) AND 
    (@blnIsinProgress IS NULL OR blnIsinProgress = @blnIsinProgress) AND 
    (@strStatus = '' OR strStatus = @strStatus) AND 
    (@strName= '' OR strName= @strName) AND 
    (@strConfirmationNumber = '' or @strConfirmationNumber = @strConfirmationNumber) 
    End 

しかし

Execute spManage 1,0,'','',123 

私にすべての結果

+0

しかし、パラメータの値は空の文字列として来ています。 –

答えて

1

問題はこのラインで得られます:

(@strConfirmationNumber = '' or @strConfirmationNumber = @strConfirmationNumber) 

第2の条件が常に真です。余分に@があります。したがって、これを試してください:

(@strConfirmationNumber = '' or @strConfirmationNumber = strConfirmationNumber) 
+0

私はとても愚かだと思うが、ありがとう –

+0

@ LearnAspNet。 。 。私たちはミスをしたときに学びます。 –

関連する問題