2016-11-15 2 views
0

Я создал хранимую процедуру, показанную ниже, и предоставляет все меню, основанные на поиске столбцов «Текст» и «Тип меню».Как обрабатывать нулевые значения в Sql Server, например, оператор

Я хочу создать его, как если бы я передал GetMenusbyTextandType '', '- 1' в качестве параметров, тогда он должен показать все записи таблицы MenuMaster. Проблема в том, что у меня есть несколько нулевых значений в столбце «MenuType», которые не отражаются в этом proc.

Create proc GetMenusbyTextandType 
    @Text nvarchar(400), 
    @MenuType nvarchar(10) 
as 
begin 
    SELECT * 
    FROM MenuMaster 
    WHERE Active = 1 
     AND [Text] LIKE '%' + @Text + '%' 
     AND MenuType LIKE 
      CASE 
       WHEN @MenuType = '-1' 
        THEN '%' + ISNULL(MenuType, '') + '%' 
        ELSE '%' + @MenuType + '%' 
      END 
END 

enter image description here

+1

От того, как выглядит ваш код, я предполагаю sql-сервер, но вы не должны заставлять людей угадывать такие вещи. Измените свой вопрос, включив в него тег релевантности rdbms и структуру таблицы. –

+0

Да, его сервер sql –

+0

и стол? добавьте таблицу DDL и некоторые данные примера как DML –

ответ

2

Вы чрезмерно усложнять Ваш SQL. Существует простое решение:

SELECT * 
FROM MenuMaster 
WHERE Active = 1 
    AND [Text] LIKE '%' + @Text + '%' 
    AND (
     @MenuType = '-1' 
     OR MenuType LIKE '%' + @MenuType + '%' 
) 
+0

спасибо @Zohar, ее рабочая ... –

+0

Рад помочь :-) –

Смежные вопросы