SQL Server условно где - PullRequest
       29

SQL Server условно где

1 голос
/ 08 сентября 2010
select * from table where category=@categoryid

Я не уверен, насколько это легко, но я не мог обдумать это. Я хочу иметь возможность изменить предложение where в приведенном выше запросе, чтобы при использовании 0 вместо 1-2-3 или 4 в качестве @categoryid он выбирал все категории. У меня нет ни одной категории с 0 в базе данных.

Ответы [ 5 ]

4 голосов
/ 08 сентября 2010

Simple.

select * from table where (category=@categoryid) OR (@categoryid = 0)
3 голосов
/ 08 сентября 2010

Это, вероятно, следует разделить на 2 отдельных запроса, если только вы на самом деле не хотите, чтобы один и тот же план выполнения полного сканирования кластеризованного индекса использовался в случае, когда @categoryid=0 и @categoryid<>0

Разделив на два отдельных запроса, вы потенциально сможете разрешить те, в которых @categoryid не равен нулю, при поиске по индексу, а не при полном сканировании.

Если таблица маленькая или @categoryid не очень избирательна, это может не быть проблемой.

2 голосов
/ 08 сентября 2010

Вы можете установить его в NULL, если вы хотите выбрать все категории, просто изменить, например,

select * from table where category= ISNULL( @categoryid, category )
1 голос
/ 08 сентября 2010
select * from table where 
category BETWEEN @mincategoryid AND @maxcategoryid

Мин. И макс. Будет одно из

  • и будет 1 (или 2 или 3 или 4)
  • соответственно 0 и большое число

Это тоже будет использовать индекс ..

0 голосов
/ 08 сентября 2010

Это SQL, а не PL / SQL.Вам нужно проверить значение перед отправкой запроса, вы не можете запросить его для проверки SQL.

...