在连接到SSRS的SP中的where子句中使用动态创建的SQL Server列

时间:2016-04-11 18:07:02

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

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

例子(dd / mm / yyyy):

  • startDate:01/01/2014
  • endDate:2014年1月12日

  • 专栏:

        id Period0Status Period1Status Period2Status Period3Status
         1  Active        Waiting        Passive       Closed
         2  Active        Passive        Active        Completed
    
  • startDate:01/01/2014

  • endDate: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属性中的“刷新字段”时,它会显示一条错误消息:

  

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

我无法在表定义上定义固定期间。在没有定义它们的情况下,我无法合法地在WHERE子句中使用它们 - 当SQL Server用红色表示它并说出语法错误时,即使存储过程在SSRS上使用它时工作也不起作用给出提到的错误。

我该如何解决这个问题?任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:1)

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

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

然后使用SSRS中的visibility属性隐藏全部为NULL的列。