繁体   English   中英

忽略存储过程中的参数 If null

[英]Ignore parameter in stored procedure If null

我正在尝试通过存储过程在表上进行多输入搜索 function。

我有四个输入参数:一个布尔值和 3 个字符串。 当我运行 1 个字符串和一个布尔值时,我得到了预期的行。

一旦我尝试将 2 和 3 输入(字符串)添加到搜索中,我就没有返回任何数据。 如果我填写了所有 3 个输入(字符串),它应该返回与这些字符串相关的行。

如果输入为空...那么它应该跳过查询的那部分

存储过程如下所示:

ALTER PROCEDURE [dbo].[GetUsers]
    @Online BIT = NULL,
    @UserName NVARCHAR(150) = NULL,
    @EmailAddress NVARCHAR(150) = NULL,
    @Location NVARCHAR(50) = NULL
AS
    SELECT *
    FROM Users
    WHERE (ISNULL(@Online, 0) = 0 OR (@Online = 1 AND Online = 1)) 
      AND (ISNULL(@UserName, UserName) = UserName OR UserName LIKE '%' + @UserName + '%' )
      AND (ISNULL(@EmailAddress, EmailAddress) = EmailAddress OR EmailAddress LIKE '%' + @EmailAddress + '%')
      AND (ISNULL(@Location, Location) = Location OR Location LIKE '%' + @Location + '%' )
    ORDER BY 
         Users
    FOR XML PATH('Users'), ROOT('Users')

    RETURN 0

尝试这个

WHERE  (  (@Online Is Null) or  (@Online = 1 AND Online = 1))
      AND ( (@UserName is null)  OR (UserName LIKE '%' + @UserName + '%' ) )
      AND (( @EmailAddress is null) or ( EmailAddress LIKE '%' + @EmailAddress + '%'))
      AND ( (@Location is null)  or   ( Location LIKE '%' + @Location + '%' ))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM