我希望使用一个存储过程来过滤我的datagridview,用户可以在txtpartname中输入部件名,也可以在txtmrpid中输入mrpid。但是,这并不像预期的那样进行过滤,只显示零件表中的所有结果。
我有一种感觉,这是由于我实现的方式,或者我不能在一个过程中执行两个类似的语句?不管怎样,有人能给我指出正确的方向,如何正确地执行这个程序。
CREATE PROCEDURE Parts_ViewAllOrSearch
@PartNameSearch nvarchar(255),
@MRPIDSearch nvarchar(255)
AS
BEGIN
SELECT *
FROM Parts
WHERE @PartNameSearch = ''
OR PartName LIKE '%' + @PartNameSearch + '%'
AND @MRPIDSearch = ''
OR MRP_ID LIKE '%' + @MRPIDSearch + '%'
END
1条答案
按热度按时间2jcobegt1#
基本上你需要在
OR
条件:你为什么需要它是因为
AND
逻辑先见之明高于OR
. 如果没有括号WHERE
条款等同于:... 这显然不是你想要的。
最后,请注意,从目前的情况来看,您的代码似乎并没有真正实现这些目标
OR
表达。如果一个参数是空字符串,那么一旦被通配符包围,它将匹配所有可能的值(除了null
值)。你可以这样写: