【问题标题】:Using dynamically created SQL Server columns in where clause in a SP connected to SSRS在连接到 SSRS 的 SP 中的 where 子句中使用动态创建的 SQL Server 列
【发布时间】:2016-08-02 01:08:35
【问题描述】:

我需要通过传递startDateEndDate 参数来运行存储过程。存储过程根据这些参数动态创建PeriodColumns:每 3 个月 1 列。

示例 (dd/mm/yyyy):

  • 开始日期:01/01/2014
  • 结束日期:01/12/2014

  • 列:

        id Period0Status Period1Status Period2Status Period3Status
         1  Active        Waiting        Passive       Closed
         2  Active        Passive        Active        Completed
    
  • 开始日期:01/01/2014

  • 结束日期:01/06/2014
  • 列:

        id Period0Status Period1Status
         7  Active        Completed
         8  Active        Waiting
    

当我尝试选择查询时:

Select * 
from myTable t 
where t.Period2 = ...

它不允许我,因为定义中没有描述 Period2 列。如上所述,这些列是动态生成的。表定义:

Create Table myTable (id int)

另一方面,像

这样的查询
Select * 
from myTable t 
where Period2 = ...

以某种方式工作正常,即使 Period2 在查询中带有红色下划线。但是,当我将此存储过程连接到另一个应用程序 Microsoft SSRS 2008 时,问题就开始了。当我单击 DataSet 属性中的 Refresh Fields 时,出现错误提示:

验证您是否可以连接到数据源以及您的查询语法是否正确

我无法在表格定义中定义固定期间。如果不定义它们,我将无法在WHERE 子句中合法地使用它们 - 当 SQL Server 用红色下划线并说语法错误时,即使存储过程在我在 SSRS 上使用它时它正在运行,它也无法正常工作并给出提及错误。

我该如何解决这个问题?任何帮助将不胜感激!

【问题讨论】:

  • 我认为报告服务有一个固定的元数据要求。除非您为列设置“默认”名称(field1、field2、field3)并始终在数据集中提供它们,即使在未映射的列中全部为 NULL。

标签: sql sql-server sql-server-2008 reporting-services ssrs-2008


【解决方案1】:

我过去这样做的方法是始终让存储过程生成相同数量的列...无论最大列数是多少。

如果只需要两列,则返回前两列的数据,其余的可以全部为NULL。

然后使用SSRS中的可见性属性隐藏所有为NULL的列。

【讨论】:

    猜你喜欢
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    相关资源
    最近更新 更多