如何处理 Sql 类似服务器的运算符中的空值
How to handle null values in Sql Server like operator
我创建了一个如下所示的存储过程,它提供了基于搜索 'Text' 和 'MenuType' 列的所有菜单。
我想创建它,如果我将 GetMenusbyTextandType '','-1' 作为参数传递,那么它应该显示 MenuMaster table 的所有记录。问题是我在 '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
您的 sql 过于复杂了。有一个简单的解决方案:
SELECT *
FROM MenuMaster
WHERE Active = 1
AND [Text] LIKE '%' + @Text + '%'
AND (
@MenuType = '-1'
OR MenuType LIKE '%' + @MenuType + '%'
)
我创建了一个如下所示的存储过程,它提供了基于搜索 'Text' 和 'MenuType' 列的所有菜单。
我想创建它,如果我将 GetMenusbyTextandType '','-1' 作为参数传递,那么它应该显示 MenuMaster table 的所有记录。问题是我在 '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
您的 sql 过于复杂了。有一个简单的解决方案:
SELECT *
FROM MenuMaster
WHERE Active = 1
AND [Text] LIKE '%' + @Text + '%'
AND (
@MenuType = '-1'
OR MenuType LIKE '%' + @MenuType + '%'
)