【问题标题】:Using parameters in stored procedures where the column may be null在列可能为空的存储过程中使用参数
【发布时间】:2010-02-25 17:26:23
【问题描述】:

我想(松散地)有一个像

这样的存储过程

select * from table where col1 like @var

@var 的默认值为'%',所以如果我没有@var 的值,它应该返回每一行。但是,问题是它不会返回 col1 为空的行。

如果@var = '%' 我如何返回所有行,如果它确实有值,我如何返回类似于@var 的行?

[实际的 sp 要复杂得多,所以我不想只将它包装在 if..then 中并有两个选择]

【问题讨论】:

    标签: sql stored-procedures null


    【解决方案1】:
    select * from table where isnull(col1, '') like @var
    

    应该做的伎俩。

    【讨论】:

    • 假设您使用的是 T-SQL,也就是说。 :-)
    • 酷。这似乎工作得很好。这使得在 CASE 和/或 COALESCE 等方面浪费了一个小时左右。干杯!
    【解决方案2】:

    提个醒比什么都重要。如果要经常使用此 SP 并且您从中选择的数据很大,请确保您对查询进行性能测试(使用上述任一解决方案)。从过去的经验来看,同时使用 LIKE 和 ISNULL 或 IS NULL 会对性能产生很大影响

    【讨论】:

      【解决方案3】:

      @var 是 '%' 时,您可以在特殊情况下包含所有空值,如下所示:

      select * from table where col like @var or (@var = '%' and col is null)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-09
        • 1970-01-01
        • 2020-01-09
        • 1970-01-01
        • 2015-08-07
        • 2013-10-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多