我有一个存储过程,可以将三列数据返回到SSRS报告中。存储过程不会对其中两列进行别名,因此它们将返回未命名的列。以下是返回数据集的示例:
[FundName] [blank] [blank]
Abc col2val1 col3val1
Def col2val2 col3val2
Ghi col2val3 col3val3
我希望能够在SSRS中使用表达式来检索第2列和第3列中的值。以下是从FundName检索数据的示例:
=Fields!FundName.Value
有没有办法用列,索引或列的位置替换列名(在本例中为FundName),如下所示:
=Fields![0].Value //returns FundName values
=Fields![1].Value //returns column 2 values
=Fields![2].Value //returns column 3 values
提前谢谢。
答案 0 :(得分:1)
如果您的存储过程未返回列名称,则无法在SSRS中创建数据集,因为它会引发错误
An item with the same key is already been added
现在可以使用SSRS中的索引来引用列名
答案 1 :(得分:1)
幸运的是,已经找到了实现这一目标的方法。由于我们的存储过程可以不更改,并且它没有返回足够的SSRS信息来生成报告(在结果DataSet中缺少列名),我们改变了填充DataSet的方式。
在DataSet查询构建器中,我们创建了一个临时表,并将存储过程插入到该临时表中。插入后,我们选择了填充DataSet的临时表中的所有值。现在,DataSet有3列,包含3个列名,供我们的报告使用。
CREATE TABLE #tempTable (
FundName varchar(50),
col2 dec(15,4),
col3 char(8)
)
insert into #tempTable
exec storedProcedureName
select * from #tempTable
drop table #tempTable
然后,您可以像以前一样访问表达式中的那些列值:
=Fields!FundName.Value //returns FundName values
=Fields!col2.Value //returns column 2 values
=Fields!col3.Value //returns column 3 values
我希望这可以帮助其他人解决这个问题。