Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reporting services SSRS创建具有未知列名的表达式_Reporting Services_Ssrs 2008_Ssrs Expression - Fatal编程技术网

Reporting services SSRS创建具有未知列名的表达式

Reporting services SSRS创建具有未知列名的表达式,reporting-services,ssrs-2008,ssrs-expression,Reporting Services,Ssrs 2008,Ssrs Expression,我有一个存储过程,它向我们的SSRS报告返回三列数据。存储过程不会为其中的两列设置别名,因此返回时未命名。下面是返回数据集的示例: [FundName] [blank] [blank] Abc col2val1 col3val1 Def col2val2 col3val2 Ghi col2val3 col3val3 =Fields!FundName.Va

我有一个存储过程,它向我们的SSRS报告返回三列数据。存储过程不会为其中的两列设置别名,因此返回时未命名。下面是返回数据集的示例:

[FundName]      [blank]          [blank]
    Abc         col2val1        col3val1
    Def         col2val2        col3val2
    Ghi         col2val3        col3val3
=Fields!FundName.Value
我希望能够使用SSRS中的表达式来检索第2列和第3列中的值。下面是一个从FundName检索数据的示例:

[FundName]      [blank]          [blank]
    Abc         col2val1        col3val1
    Def         col2val2        col3val2
    Ghi         col2val3        col3val3
=Fields!FundName.Value
是否有任何方法可以将列名(在本例中为FundName)替换为列的索引或位置,如下所示:

=Fields![0].Value    //returns FundName values
=Fields![1].Value    //returns column 2 values
=Fields![2].Value    //returns column 3 values

提前感谢。

如果存储过程没有返回列名,则无法在SSRS中创建数据集,因为它会引发错误

An item with the same key is already been added

现在有了一种在SSRS中使用索引引用列名的方法

幸运的是,已经找到了一种实现这一点的方法。由于我们的存储过程可以不更改,并且它没有返回足够的信息供SSR生成报告(结果数据集中缺少列名),因此我们更改了填充数据集的方式

在数据集查询生成器中,我们创建了一个临时表,并将存储过程插入到该临时表中。插入后,我们选择了填充数据集的临时表中的所有值。现在,数据集有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

我希望这能帮助其他人解决这个问题。

谢谢你的评论,但这是不正确的。如果存储过程返回没有列名的列,则SSRS不会抛出错误。数据集仍将被填充,我知道这一点,因为我的报告正是如此。但是,无法准确访问列。正如您所说,在SSRS中,您不能通过索引访问列。如果数据集中的所有列都缺少列名,SSRS将只使用集合中的第一列。我们用另一种方法解决了这个问题(见上面我的答案)