Добрый день, предположим, что у меня есть запрос на выборку по 4 параметрам, но я не знаю сколько у меня будет параметров, когда я буду выполнять запрос, могу ли я указать "специальный симовол", например name='any', чтобы этот параметр не влиял на результаты выборки?
Рональд Макдональд, так говорю я. Если вас это почему-то взволновало - это глубоко ваши половые трудности.
Впрочем, раз народ плюсует недоумение, немножко разжую: канделябрами принято бить шулеров, но выражение "в нашем деле за это бьют канделябрами" может использоваться и в других случаях - например, в профессиональной среде для обозначения misguided behavior.
Руки того, кто так строит запросы, очевидно, требуют принудительного выпрямления.
Надеюсь, зловещая завеса тайны пала, и народ может дальше спокойно безмолствовать.
Очевидно же, что надо правильно строить запрос, а не вплетать в него костыли.
Adamos говорит про то, что так вообще не надо делать, вопрос этот не должен возникать в принципе. Но вот у остальных пригорает, т.к. они ввиду скудоумия не в состоянии понять иронию.
Philipp, Дело в том, что sql является частью программы и необходимо максимально сократить количество написанных запросов, именно по этому приходится прибегать к подобным практикам. Неизвестно сколько аргументов передаст клиент, 4 или 1, не писать же запрос под каждый случай.
LazariusPaskalius, запрос надо не писать, а конструировать. Конструктором, предусматривающим произвольные данные в этом запросе. Если вы собрались сделать умный фильтр и при этом выписываете каждый запрос вручную - то ваш бег по граблям еще только стартовал.
CREATE PROCEDURE SearchGrid @P1 VARCHAR(100) = NULL, @P2 VARCHAR(100) = NULL…
AS
SELECT
…
WHERE ((NOT @P1 IS NULL) AND (SearchLike.Search LIKE '%' + @P1 + '%'))
OR ((NOT @P2 IS NULL) AND (SearchLike.Search LIKE '%' + @P2 + '%'))
…
В этом случае выборка будет пустая, если оба параметра null
ИМХО, надо так:
CREATE PROCEDURE SearchGrid @P1 VARCHAR(100) = NULL, @P2 VARCHAR(100) = NULL…
AS
SELECT
…
WHERE ((@P1 IS NULL) OR (SearchLike.Search LIKE '%' + @P1 + '%'))
AND ((@P2 IS NULL) OR (SearchLike.Search LIKE '%' + @P2 + '%'))
…