【问题标题】:Microsoft SQL Server Report Builder 3.0 set null parameter not workingMicrosoft SQL Server Report Builder 3.0 设置空参数不起作用
【发布时间】:2016-03-03 19:25:30
【问题描述】:

我的 SQL 查询中有两个参数,我希望 NAME_ 可以设置为 null,我是这样写的:

SELECT * FROM DATASET WHERE DATE_=(@DATE_) AND NAME_=(@NAME_) OR NAME_ IS NULL

当 NAME_ 为空时,我想选择 DATE_=(@DATE_) 的所有项目,这意味着:

 SELECT * FROM DATASET WHERE DATE=(@DATE_)

当 NAME_ 不为空时,它的行为如下:

 SELECT * FROM DATASET WHERE DATE_=(@DATE_) AND NAME_=(@NAME_)

@NAME_ 的可能值来自查询

SELECT NAME_ FROM DATASET WHERE DATE_=(@DATE_)

我在参数属性中勾选了“允许空值”,但每次运行报告时它仍然提醒我选择一个 NAME_ 值。

我不知道我还能做些什么来使 null 值成为可能。任何建议都会非常有帮助。谢谢!

【问题讨论】:

    标签: sql-server reporting-services ssrs-2008 reportbuilder3.0


    【解决方案1】:

    我相信你想要这样的东西:

    WHERE ColumnName = ISNULL(@ParamValue, ColumnName)
    

    这让数据集知道如果设置了变量然后使用它,否则有一个操作符让值等于它自己。

    应用于您的示例:

    SELECT * FROM DATASET WHERE DATE_=(@DATE_) AND NAME_= ISNULL((@NAME_), NAME_)
    

    【讨论】:

    • 谢谢!另一件事是我已经勾选了“允许空值”,但系统仍然提醒我选择一个值。 @DATE_ 是@NAME_ 的参数,是否与其他参数有关?
    • 尝试取消选中该参数的“允许多个值”复选框。
    • 我没有勾选。情况是在我为 DATE 选择值之前,有一个空复选框,但是在我选择了一个 DATE 之后,该框消失了。 DATE 是 NAME 的一个参数。
    【解决方案2】:

    首先,如 Oceans 所说,使用 WHERE ColumnName = ISNULL(@ParamValue, ColumnName)。那么在参数查询中,“SELECT NULL FROM DATASET”应该是union。最后勾选“允许空值”;就我而言,它应该遵循以下步骤:

    1. SELECT * FROM DATASET WHERE DATE_=(@DATE_) AND NAME_= ISNULL((@NAME_), NAME_)
    2. 在 NAME_ 中选择查询:SELECT NAME_ FROM DATASET WHERE DATE_=(@DATE_) UNION SELECT NULL FROM DATASET
    3. 在NAME_的参数设置中勾选“允许空值”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多