如果字段值为空,则在where子句中排除列

时间:2016-07-23 20:32:15

标签: mysql sql asp.net web

我有一个搜索屏幕的存储过程,我有5个不同的过滤器。 用户可以将过滤器留空或使用一个过滤器,然后单击搜索按钮。

所有数据都来自数据库,我试图创建存储过程,如果参数值为空字符串,则可以排除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 

会给我所有结果

1 个答案:

答案 0 :(得分:1)

问题在于这一行:

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

第二个条件总是如此。你有一个额外的@。所以,试试这个:

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