編寫映射到多值報(bào)表參數(shù)的查詢
您可以為要?jiǎng)?chuàng)建的任何報(bào)表參數(shù)定義多值參數(shù)。不過,如果要將多個(gè)參數(shù)值傳回查詢,則必須滿足下列要求:
- 數(shù)據(jù)源必須為 SQL Server、Oracle 或 Analysis Services。
- 數(shù)據(jù)源不能是存儲過程。Reporting Services 不支持將多值參數(shù)數(shù)組傳遞給存儲過程。
- 查詢必須使用 IN 語句來指定參數(shù)。
MSDN有上述的描述,可見多值參數(shù)必須用于數(shù)據(jù)集查詢文本為Select ... Where XXXId in (@Parameters)的典型應(yīng)用,
如果用到存儲過程就會(huì)報(bào)類型(ID參數(shù)是字符串型)無法轉(zhuǎn)換等錯(cuò)誤;
如獲取數(shù)據(jù)為 exec dbo.pGetOrders @OrderID??? (存儲過程內(nèi)容見如下代碼)
?
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 ;
?
?
上面問題通過筆者反復(fù)琢磨,找到一種變通的辦法:
增加一個(gè)“內(nèi)部”參數(shù),將其設(shè)置為級聯(lián)參數(shù)(必須排列在上面提到的多值參數(shù)之后),如@InnerOrderIDs類型為String,可用值和默認(rèn)值都設(shè)置為表達(dá)式如下:
=Join(Parameters!OrderID.Value,??", ")
然后修改獲取數(shù)據(jù)的SQL為 exec dbo.pGetOrders @InnerOrderIDs 就大功告成!
?
Reporting Services 的多值參數(shù)究竟能否用在數(shù)據(jù)集獲取途徑為存儲過程的情景呢?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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