編寫映射到多值報表參數的查詢
您可以為要創建的任何報表參數定義多值參數。不過,如果要將多個參數值傳回查詢,則必須滿足下列要求:
- 數據源必須為 SQL Server、Oracle 或 Analysis Services。
- 數據源不能是存儲過程。Reporting Services 不支持將多值參數數組傳遞給存儲過程。
- 查詢必須使用 IN 語句來指定參數。
MSDN有上述的描述,可見多值參數必須用于數據集查詢文本為Select ... Where XXXId in (@Parameters)的典型應用,
如果用到存儲過程就會報類型(ID參數是字符串型)無法轉換等錯誤;
如獲取數據為 exec dbo.pGetOrders @OrderID??? (存儲過程內容見如下代碼)
?
GO
SET ?ANSI_NULLS? ON
GO
SET ?QUOTED_IDENTIFIER? ON
GO
ALTER ? PROCEDURE ? [ dbo ] . [ spGetOrders ]
???? @OrderIDs ? varchar ( 500 )? = ? ''
AS
BEGIN
???? SET ?NOCOUNT? ON ;
????
???? DECLARE ? @sql ? varchar ( 500 )
???? SET ? @sql ? = ? ' SELECT?*?FROM?Sales.SalesOrderDetail ' ;
???? IF ? @OrderIDs ? <> ? '' ? SET ? @sql ? = ? @sql ? + ? ' ?WHERE?[SalesOrderID]?IN?( ' ? + ? @OrderIDs ? + ? ' ) ' ;
???? EXEC ?( @sql );
????
???? SET ?NOCOUNT? OFF ;
END ;
?
?
上面問題通過筆者反復琢磨,找到一種變通的辦法:
增加一個“內部”參數,將其設置為級聯參數(必須排列在上面提到的多值參數之后),如@InnerOrderIDs類型為String,可用值和默認值都設置為表達式如下:
=Join(Parameters!OrderID.Value,??", ")
然后修改獲取數據的SQL為 exec dbo.pGetOrders @InnerOrderIDs 就大功告成!
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
