Выражение «CASE», применять ли условие WHERE к запросу или нет - PullRequest
0 голосов
/ 02 марта 2020

Я пытался выполнить sh что-то вроде приведенного ниже кода внутри хранимой процедуры

    Select * from TABLE1 
       CASE WHEN @SPParameter != 0 THEN        -- if @SPParameter equals 0 then apply the where condition
          WHERE Table1Column = @SPParameter    -- apply a where condition
       END

Цель этого запроса - выбрать все строки из TABLE1, если @SPParameter равно ноль, иначе отфильтруйте строки из TABLE1, если @SPParameter не равно нулю.

Очевидно, что приведенный выше запрос выдаст сообщение об ошибке, так как синтаксис неверен. Это возможно? Или оператор if else является единственным выходом?

Ответы [ 5 ]

2 голосов
/ 02 марта 2020

Просто используйте простые логические логики c 1 :

Select * from TABLE1 
   WHERE @SPParameter != 0 OR Table1Column = somevalue

CASE - это выражение . Он вычисляет значение . Это не произвольно переставляет дерево разбора оператора, в котором оно появляется.


1 Это будет немного сложнее, если мы будем иметь дело с NULL s, но Я их пока проигнорировал.

1 голос
/ 02 марта 2020
SELECT Name, JobType
FROM   EMP
WHERE  1 = CASE

          WHEN JobType = 'VC' THEN 1
          WHEN JobType = 'HR' THEN 1
          WHEN JobType = 'DEV' THEN 1
          ELSE 0
       END;

Приведенный выше пример возвращает CASE, если тип задания присутствует в таблице, тогда будет возвращено имя и тип задания.

1 голос
/ 02 марта 2020

Вы пытаетесь использовать case, где-то как показано ниже:

 Select * from TABLE1 
 where Table1Column = case when @SPParameter = 0 then @SPParameter else @SPParameter  end;
1 голос
/ 02 марта 2020

Вы можете достичь, используя OR условие, подобное этому

WHERE (@SPParameter = 0 OR Table1Column = somevalue)
0 голосов
/ 02 марта 2020
Select * from TABLE1
          WHERE Table1Column = CASE 
          WHEN @SPParameter != 0 THEN  @SPParameter  
       END;

Здесь условие WHERE получает значение из оператора CASE, если @SPParameter не равно нулю, что означает, что значение присутствует, ТОГДА будет возвращено значение @SPParameter.

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