如何在Sql Server中像操作符一样处理空值

时间:2016-11-15 06:07:05

标签: sql-server rdbms

我创建了一个如下所示的存储过程,它提供了基于搜索' Text'的所有菜单。和'菜单类型'列。

我想创建它就像我通过GetMenusbyTextandType''' -1'作为参数,它应该显示MenuMaster表的所有记录。问题是我在' MenuType'中有一些空值。列,不反映在此过程中。

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 个答案:

答案 0 :(得分:2)

你的sql过于复杂。有一个简单的解决方案:

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