2016-07-23 42 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。 。 。我们知道什么时候犯错误。 –