当前位置: 首页 > 面试题库 >

如果参数为null,则SQL忽略WHERE的一部分

蒋星驰
2023-03-14
问题内容

我有一个存储过程,可根据4个参数从表中获取信息。

我想基于参数获取值,但是如果参数为NULL,则不会检查该参数。因此,如果所有4个参数都为null,则将显示整个表。

这是我的SP(如您所见,这仅适用于1个参数atm):

CREATE PROCEDURE myProcedure
    @Param1 nvarchar(50),
    @Param2 nvarchar(50),
    @Param3 nvarchar(50),
    @Param4 nvarchar(50)
AS
BEGIN
    IF(@Param1 IS NULL)
        BEGIN
            SELECT Id, col1, col2, col3, col4 FROM myTable
        END
    ELSE
        BEGIN
            SELECT Id, col1, col2, col3, col4 FROM myTable WHERE col1 LIKE @Param1+'%'
        END
END

有什么方法可以做到, 不必IF为每种可能的组合都加一个(15个IF)?


问题答案:

怎么样

SELECT Id, col1, col2, col3, col4 
FROM    myTable 
WHERE   col1 LIKE @Param1+'%'
OR      @Param1 IS NULL

在这种情况下,您可能还使用了

SELECT Id, col1, col2, col3, col4 
FROM    myTable 
WHERE   col1 LIKE ISNULL(@Param1,'')+'%'

但总的来说,您可以尝试类似

SELECT Id, col1, col2, col3, col4 
FROM    myTable 
WHERE   (condition1 OR @Param1 IS NULL)
AND     (condition2 OR @Param2 IS NULL)
AND     (condition3 OR @Param3 IS NULL)
...
AND     (conditionN OR @ParamN IS NULL)


 类似资料:
  • 问题内容: 该查询允许对结果进行过滤,而不是对我将如何更新的结果进行过滤,因此它仅严格显示大学= 2时的结果 我将全文搜索与LIKE结合使用的原因是,由于全文搜索具有的最小字母数,并且由于我处于共享主机计划中,因此无法修改设置。结果,我将全文和LIKE结合在一起以适应 问题答案: 修正括号 具有比更高的优先级,因此只能与结合使用,而不能与测试结合使用。

  • 问题内容: 我想要一个带有两个参数的spring数据存储库接口。有没有办法使其具有以下行为? 如果两个参数都有一个值,我希望它正常运行并对两个值都执行“与”运算。 例如,如果第二个参数为null,则它将仅按ParameterOne搜索 有什么建议么? 问题答案: 我不知道这是可能的仓库方法命名,但你可以使用像

  • 我想要一个spring数据存储库接口,它采用两个参数。有没有办法使其具有以下行为? 如果这两个参数都有一个值,我希望它正常运行,并对这两个值执行“and”。 例如,如果第二个参数为null,则它将仅按ParameterOne进行搜索 有什么建议吗?

  • 问题内容: 我有一个SP,这给了我很多困难。 sp获得两个参数@madeByUserId和@reportedByUserId。我想要类似的东西: 基本上,我想在where子句中提出一个案例,以包含另一个基于@reportedByUserId的null / not null状态的过滤条件 那可能吗? 非常感谢Radu 问题答案: 尝试:

  • 问题内容: 这可能很明显,但我感到非常困惑。 我有一个带where子句(带参数列表的where)的SQL查询。如果所有这些参数都为null,则需要SQL忽略where子句并检索所有记录。这在SQL中容易做到吗?我知道一种解决方法是,如果参数为null,则仅使用代码删除where子句。 问题答案: 您可以尝试执行以下操作: 当然,它需要在您自己的查询中进行一些调整,但是现在您将检查参数是否为空或执行

  • 我目前正在开发我的项目的搜索和过滤功能。我正在尝试使用此请求主体检索数据: 下面是从ReasearchRepository检索此数据的方法: 我的问题是,当我试图从请求中的给定值中查找数据时,它返回一个空列表[],即使它存在于数据库中。我想要实现的是,如果参数为null,它将忽略查询中的特定条件,并且仍将返回数据。 我刚看完贝尔东的那篇文章。 我还找到了另一篇关于使用Criteria API的文章