0

我想隨後填充在SSRS表變量並調用一個SP來處理它的數據:填充的寬表與SSRS文本參數用分隔符

DECLARE @Tbl1 TABLE 
(
    D01 float, 
    D02 float, 
    D03 float, 
    D04 float, 
    D05 float, 
    ... 
    D96 float 
) 

要填充它,我使用文本參數@LS。該輸入逗號分隔的字符串與96個元素:

0.635316969,0.756943899,0.890520142,1.028008362,1.166350106,1.30511861,1.444527254,1.580948571,1.578743639,1.575542931,1.573195746,1.571346448,1.571275321,1.56992391,1.568003484,1.567221089,1.556836567,1.543820351,1.53037, ...., ,0.514543561 

在DataSet我想先填充表(在表變量聲明):

insert into @Tbl1 
VALUES (@LS) 

卻得到了在運行時出現此錯誤: 「提供的值的列名或數量與表定義不匹配。」

我試着JOIN(SPLIT())用逗號沒有運氣。有任何想法嗎?

謝謝!

+0

歡迎來到Stack Overflow。正如我上面所做的那樣,如果您爲易讀性設置格式問題,您可能會得到更好的答案。乾杯... – GreenAsJade 2014-10-27 23:21:47

回答

0

問題是@LS參數是一個單值的文本參數,所以你不能像那樣使用它 - 你需要使用一個多值參數。

所以讓我們嘗試一些不同的東西。你並不需要創建一個臨時表,因爲你可以建立自己的列值給你想使用這樣的SQL數據集:

SELECT 0.635316969 AS D01, 0.756943899 AS D02, ... , 0.514543561 AS D96 

幸運的幾乎一切都在SSRS是一個表達式,所以我們只需要使用表達式從@LS參數動態構建此Sql語句。轉到Report菜單,然後Report Properties...並單擊Code選項卡。輸入以下代碼:

Function MakeSql(LS As String) As String 
    Dim Sql As String 
    Dim Values() As String 
    Dim i As Integer 

    Sql = "SELECT " 
    Values = Split(LS, ",") 

    For i = 0 To Values.Length - 1 
    Sql = Sql + Values(i) + " AS D" + Right("0" + CStr(i+1), 2) + ", " 
    Next i 

    Sql = Left(Sql, Len(Sql) - 2) ' Remove trailing comma 

    Return Sql 
End Function 

所以我們正在做的是分裂串入我們遍歷創建別名這些值我們想要的字段名稱SQL語句值的數組。

用鼠標右鍵點擊數據集,然後選擇Dataset Properties並按查詢文本框旁邊的fx按鈕。這允許我們爲我們的Sql語句而不是實際的Sql語句輸入一個文本表達式。在這裏,我們需要調用我們創建上面這將插入我們定製SQL表達式的自定義代碼功能:

=Code.MakeSql(Parameters!LS.Value) 

確保您的數據集有場D01D96(你必須手動設置這些,因爲SSRS無法分析Sql表達式來確定字段值),並且您完成了!

+0

感謝您的快速回答!看起來我需要Visual Studio包含代碼,因爲我現在只使用Report Builder,是否正確?如果是這樣的話,我將需要一個SQL UDF中的類似代碼? – luboxing 2014-10-28 03:14:47

+0

[本MSDN文章](http://msdn.microsoft.com/en-AU/library/ms159238.aspx)表明您可以在Report Builder中使用嵌入式代碼,但是我使用Visual Studio,因此我不知道它是如何實現的在那裏完成。您還可以創建一個類似的SQL UDF,該UDF根據動態構建的SQL語句執行查詢並返回數據集。如果這是將在多個報告中使用的東西,那麼這是首選的方法。 – 2014-10-28 03:41:35