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

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