2016-11-15 61 views
0

我创建了如下所示的存储过程,它提供了基于搜索'Text'和'MenuType'列的所有菜单。如何处理Sql Server中的空值,如运算符

我想创建它就像我传递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

从你的代码看起来的方式我猜sql server,但你不应该让人们猜这样的东西。请编辑您的问题以包含相关的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

很高兴帮助:-) –