2012-08-30 22 views
0

我有一個存儲過程,它將三列數據返回給我們的SSRS報告。該存儲過程不會別名這些列中的兩個,因此它們將被匿名返回。這裏是返回數據集可能看起來像一個例子: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 

預先感謝您。

回答

1

幸運的是,找到了一種方法來實現這一點。由於我們的存儲過程可能會而不是被更改,並且它沒有返回足夠的信息讓SSRS生成報告(在結果數據集中缺少列名),我們改變了我們的數據集填充的方式。

在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 

我希望這有助於其他人使用這一具體問題。

1

如果你的存儲過程沒有返回的列名的時候,你不能在SSRS創建數據集,因爲它會拋出一個錯誤

An item with the same key is already been added 

,現在有辦法可以參考使用索引列名在SSRS

+0

感謝您的評論,但這是不正確的。如果存儲過程返回沒有列名的列,SSRS將**不會拋出錯誤。數據集仍然會被填充,我知道這一點,因爲我的報告正是如此。準確地訪問列是不可能的。正如你所說,你**不能**按SSRS中的索引訪問列。如果數據集中的所有列均缺少列名,則SSRS將簡單地使用該集中的第一列。我們以另一種方式解決了問題(請參閱上面的答案) – Sam