【问题标题】:Optional Reporting Parameters (is there a better way?)可选报告参数(有更好的方法吗?)
【发布时间】:2012-07-06 22:27:33
【问题描述】:

我有一份包含 4 个参数的报告。我想让它们不是必需的。问题是执行此操作的常规方法,创建 16 个 OR/AND 语句。如果我有 10 个不需要的参数,SOL 语句就会失控。这可行,但有更简单的方法吗?

这是我所拥有的:

主要数据集:

select * 
from table 
where 
     table.one = @param1 OR @param1 IS NOT NULL 
     AND.....(etc.etc..)

@param1、@param2、@param3、@param4:(默认值为空/空白)

Select some_column from any_table UNION SELECT '' as Nothing

【问题讨论】:

    标签: sql database tsql reporting-services


    【解决方案1】:

    我一直这样做的方式是

    WHERE 
      col1 = isnull(@col1, col1) 
      and col2 = isnull(@col2, col2)
      ...etc
    

    差不多就是你所拥有的,还有一些语义更正。

    【讨论】:

    • 否 - 如果您的参数是可选的,那么我会假设 NULL 表示他们没有指定值。因此,如果值为 NULL,您希望将表的列等同于自身(以返回所有值)。
    • 实际上,如果表中的值为NULL,这是行不通的;并且,COALESCE 比 ISNULL 更好用,因为前者是标准的。这是一个更好的表达式:coalesce(col1, '') = coalesce(@col1, col1, '')。
    猜你喜欢
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多