2017-04-24 349 views
0

我有這些值傳遞到存儲過程的參數:SSRS多值參數問題

「CA,FL,NY,NJ,MA,CT,RI」。

我遇到的問題是,如果我選擇「ALL」選項,它不會帶回任何「CT」值。如果我單獨選擇,它會帶回「CT」。我注意到沒有「MA」的記錄,所以我不知道這是否與它有關。

我使用逗號分隔的分隔符在SQL中解析值。

此外,有沒有人知道如何測試SQL Server中的參數,看看它是如何實際傳遞值?

存儲過程如下:

SELECT DISTINCT divisionid, 
divisionname 
FROM TABLE A 
UNION 
SELECT -1, 'N/A'  
+0

在其上運行一個sql分析器來查看運行的實際查詢。 – twothreebrent

+3

發佈程序.... – scsimon

+0

多值參數*不生成這樣的字符串。它們生成'IN(a,b,c)'子句。當你在@ ids中寫WHERE someID並指定@ id是一個多值參數時,SSRS會發送'WHERE someID in(id1,id2,id3)',其中'id1'等是由用戶 –

回答

-1

創建函數的數據作爲表

分離:

CREATE PROCEDURE plicense 
(@division VARCHAR(500)) 
AS 
SELECT a.lastname, 
a.firstname, 
b.divisionname 
from Table A 
INNER JOIN Table B 
ON A.practid = B.practid 
WHERE B.divisionname in (SELECT item from dbo.fnsplit(@division, ',')) 

的SSRS參數由一個存儲過程,看起來像這樣填充

CREATE FUNCTION [dbo].[Split] 
(
    @List NVARCHAR(2000), 
    @SplitOn NVARCHAR(5) 
) 
RETURNS @RtnValue TABLE 
(

    Id INT IDENTITY(1,1), 
    Value NVARCHAR(100) 
) 
AS 
BEGIN 

WHILE (CHARINDEX(@SplitOn,@List)>0) 
BEGIN 

INSERT INTO @RtnValue (value) 
SELECT 
    Value = LTRIM(RTRIM(SUBSTRING(@List,1,CHARINDEX(@SplitOn,@List)-1))) 


     SET @List = SUBSTRING(@List,CHARINDEX(@SplitOn,@List)+LEN(@SplitOn),LEN(@List)) 
END 

    INSERT INTO @RtnValue (Value) 
    SELECT Value = LTRIM(RTRIM(@List)) 

    RETURN 
END 

在您的報告中,

Where column in (select dbo.split (@param)) 
+0

在遙遠的過去,我也遇到了同樣的問題,我設法用這個木槌來解決 –

+0

這不是SSRS多值參數的工作方式。他們*不會*生成一個單一的字符串,它們被用來生成一個'IN(a,b,c)'子句。這也是分割字符串最慢的方法之一。 –

+0

再次閱讀我解釋的內容。 –

0

該問題出現在SSRS中。我需要將它添加到主存儲過程的參數部分:= join(Parameters!division.Value,「,」)。