Я использую поиск веб-форм asp .net в C#, например, с полями: - название - фрукты
Я хочу написать sproc, который может искать имя или фрукт. Если бы я знал, что у обоих будут значения, я бы передал в sproc два параметра и написал бы:
Select * from myTable where name =@name and fruit = @fruit
Однако иногда имя или фрукт могут быть пустыми. Без написания отдельного поиска по фрукту и названию. Как мне этого добиться?
Я бы предпочел не создавать динамический запрос, если это возможно, но если это единственный способ, как мне его написать?





Вам нужно убедиться, что пустые строки не передаются в качестве аргументов вместо null, но следующее должно работать. Однако я почти уверен, что, если пользователь ничего не вводит, значение формы будет нулевым.
select * from myTable
where (@name is null or name = @name) and (@fruit is null or fruit = @fruit)
может быть:
SELECT * FROM myTable WHERE name Like '%' + @name AND fruit LIKE '%' + @fruit
select * from myTable
where
(name = @name and fruit = @fruit)
or (name = @name and @fruit is null)
or (fruit = @fruit and @name = is null )
select * from myTable where name = isnull(@name, name) and fruit = isnull(@fruit, fruit)
Вернет всю таблицу, если и @name, и @fruit равны нулю. Если это проблема, вам лучше добавить дополнительную логику в SP.
когда пользователь передает null, null это решение вернет все записи в таблице