SQL: где MYID = ЛЮБОЙ? - PullRequest
       3

SQL: где MYID = ЛЮБОЙ?

0 голосов
/ 22 апреля 2011

В запросе SQL, который содержит

... WHERE MYID = @1 ....

Мне нужно обработать 2 случая
1) В столбце есть фильтр, @ 1 будет числом (1,2, X...)

2) В этом столбце нет фильтра, @ 1 будет ...?( ЛЮБОЙ )

Есть ли что-то для этого "любого" (SQL Server 2005)?

PS.
Очевидно, я понимаючто я могу удалить "где".

PPS.
Я объясняю себя для лучшего понимания: у меня есть этот запрос в коде, и я хотел бы передать целое число в качестве параметра, когда фильтр включен, и "что-то"«когда мой фильтр выключен.

if (filterOn)
    GetFoos(fooID);
else
    GetFoos("ANY");

GetFoos(param1): "select * from FOOS where FOOID = {0}", param1

Ответы [ 5 ]

2 голосов
/ 22 апреля 2011

Сделайте UNION ALL из двух утверждений:

SELECT  *
FROM    mytable
WHERE   myid = @col
UNION ALL
SELECT  *
FROM    mytable
WHERE   @col IS NULL

или просто разбить их на IF / ELSE блок хранимых процедур.

В любом случае оптимизатор сможет оптимизировать запросы отдельно, полностью игнорируя один из них в зависимости от значения @col.

1 голос
/ 22 апреля 2011

вы можете сделать что-то в этом направлении:

 where (myid = @id or @id is null)

, поэтому вы будете фильтровать только тогда, когда @id содержит значение, а не когда null.

0 голосов
/ 22 апреля 2011

Если

"select * from FOO where FOOID = {0}", param

использовать param = "FOOID", когда нет параметра для фильтрации, это даст

select * from FOO where FOOID = FOOID // removing the filter
0 голосов
/ 22 апреля 2011

Если вы не хотите фильтровать по конкретному столбцу, просто не фильтруйте по этому столбцу.Удалить WHERE MYID = полностью

0 голосов
/ 22 апреля 2011

Просто удалите оператор where или and, если в этом столбце нет фильтра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...