Ssrs

SSRS 報告不適用於多個參數

  • December 12, 2019

我的數據集有以下 where 子句:

WHERE a11.PDPOID LIKE '%' + @POID + '%'

我的參數@POID屬性設置為單個值。該報告有效,但如果我更改參數屬性以允許多個值,則會出現錯誤:

數據集“DataSetDtRcvd”的查詢執行失敗。’,’ 附近的語法不正確。

報表參數屬性的螢幕截圖

在此處輸入圖像描述

在此處輸入圖像描述

您遇到了這個問題,因為 SSRS 在使用文本查詢與為數據集使用儲存過程時傳遞多值參數的方式不同。

當使用文本查詢時,在執行查詢之前,參數實際上被替換為字元串的文字列表,例如PDPOID IN (@PDPOID)被翻譯為PDPOID IN ('aaa', 'bbb', 'ccc')(假設您選擇了’aaa’、‘bbb’ 和’ccc’)。

對於儲存過程,選定的值將轉換為逗號分隔的列表,並作為單個字元串/字元參數傳遞。因此,如果您的儲存過程有一個名為 的參數@PDPOID,那麼該參數將設置為單個值“aaa,bbb,ccc”。

完成這項工作的最簡單方法是更改​​您的報告以使用儲存過程進行查詢,然後使用該STRING_SPLIT函式(如果您執行的版本早於 SQL Server 2016,則使用合適的自製字元串拆分函式)。例如:

CREATE PROCEDURE POReport
   @POID varchar(max)
AS

SELECT *
FROM POs a11
WHERE EXISTS (SELECT p.value FROM STRING_SPLIT(@POID,',') p WHERE a11.PDPOID LIKE '%' + p.value + '%')

您可以通過將數據集查詢更改為表達式並Join在多值參數上使用運算符來實現此目的,例如,您的表達式看起來像

= "Select * " &
 "from table t " &
 "where a11.PDPOID LIKE '%" & Join(Parameters!TestParm.Label, "%' OR a11.PDPOID LIKE 
 '%") & "%'"

Select * from table t用您的查詢替換。

引用自:https://dba.stackexchange.com/questions/246019