Обычно вам нужны круглые скобки вокруг условия 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 + '%'