2016-07-23 63 views
0

我有一個存儲過程用於搜索屏幕,其中有5個不同的過濾器。 用戶可以將過濾器留空或有一個過濾器,然後單擊搜索按鈕。如果字段值爲空,在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) 

第二個條件是總是如此。你有額外的@。所以,試試這個:

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

我覺得很蠢,但是謝謝 –

+0

@LearnAspNet。 。 。我們知道什麼時候犯錯誤。 –