具有 2 个 Like 参数的存储过程
Stored procedure with 2 Like parameters
我希望通过用户将部件名称输入到 txtPartName 中或将 MRPID 输入到 txtMRPID 中来使用存储过程来过滤我的数据网格视图。然而,这并没有像预期的那样进行过滤,只是显示 table 部分的所有结果。
我觉得这是由于我实现 AND 的方式所致,或者我可能无法在一个过程中执行 2 个 LIKE 语句?无论如何,有人可以指出正确的方向,告诉我如何正确执行此过程。
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
基本上你需要在 OR
条件周围加上括号:
SELECT *
FROM Parts
WHERE
(@PartNameSearch = '' OR PartName LIKE '%' + @PartNameSearch + '%')
AND (@MRPIDSearch = '' OR MRP_ID LIKE '%' + @MRPIDSearch + '%')
为什么需要它是因为 AND
比 OR
具有更高的逻辑优先级。因此,如果没有括号,WHERE
子句等同于:
WHERE
@PartNameSearch = ''
OR (PartName LIKE '%' + @PartNameSearch + '%' AND @MRPIDSearch = '')
OR MRP_ID LIKE '%' + @MRPIDSearch + '%'
...这显然不是你想要的。
最后,请注意,就目前而言,您的代码似乎并不真正符合这些 OR
表达式。如果参数是空字符串,那么一旦用通配符包围,它将匹配所有可能的值(null
值除外)。您只需将其写为:
WHERE
PartName LIKE '%' + @PartNameSearch + '%'
AND MRP_ID LIKE '%' + @MRPIDSearch + '%'
我希望通过用户将部件名称输入到 txtPartName 中或将 MRPID 输入到 txtMRPID 中来使用存储过程来过滤我的数据网格视图。然而,这并没有像预期的那样进行过滤,只是显示 table 部分的所有结果。
我觉得这是由于我实现 AND 的方式所致,或者我可能无法在一个过程中执行 2 个 LIKE 语句?无论如何,有人可以指出正确的方向,告诉我如何正确执行此过程。
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
基本上你需要在 OR
条件周围加上括号:
SELECT *
FROM Parts
WHERE
(@PartNameSearch = '' OR PartName LIKE '%' + @PartNameSearch + '%')
AND (@MRPIDSearch = '' OR MRP_ID LIKE '%' + @MRPIDSearch + '%')
为什么需要它是因为 AND
比 OR
具有更高的逻辑优先级。因此,如果没有括号,WHERE
子句等同于:
WHERE
@PartNameSearch = ''
OR (PartName LIKE '%' + @PartNameSearch + '%' AND @MRPIDSearch = '')
OR MRP_ID LIKE '%' + @MRPIDSearch + '%'
...这显然不是你想要的。
最后,请注意,就目前而言,您的代码似乎并不真正符合这些 OR
表达式。如果参数是空字符串,那么一旦用通配符包围,它将匹配所有可能的值(null
值除外)。您只需将其写为:
WHERE
PartName LIKE '%' + @PartNameSearch + '%'
AND MRP_ID LIKE '%' + @MRPIDSearch + '%'