我有一个用于搜索屏幕的存储过程,其中有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
会给我所有结果
问题是这一行:
(@strConfirmationNumber = '' or @strConfirmationNumber = @strConfirmationNumber )
第二个条件始终为真。你有一个额外的@
。因此,请尝试以下操作:
(@strConfirmationNumber = '' or @strConfirmationNumber = strConfirmationNumber )
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句