我需要通过传递startDate
和EndDate
参数来运行存储过程。存储过程基于这些参数动态创建PeriodColumns
:每3个月1列。
例子(dd / mm / yyyy):
endDate:2014年1月12日
专栏:
id Period0Status Period1Status Period2Status Period3Status
1 Active Waiting Passive Closed
2 Active Passive Active Completed
startDate:01/01/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上使用它时工作也不起作用给出提到的错误。
我该如何解决这个问题?任何帮助都会非常感激!
答案 0 :(得分:1)
我过去这样做的方法是始终让存储过程生成相同数量的列...无论列的最大数量是多少。
如果您只需要两列,则返回带有数据的前两列,其余列可以全为NULL。
然后使用SSRS中的visibility属性隐藏全部为NULL的列。