对于具有多个 select 参数的 SSRS 报告,当我 'select all' 具有一长串值的参数时,报告会抛出 javascript 错误

For an SSRS report with multi select parameters, when I 'select all' for a parameter having a long list of values, report throws a javascript error

这是我得到的错误:"Error: Sys.WebForms.PageRequestManagerServerErrorException: An unknown error occurred while processing the request on the server. The status code returned from the server was: 500:"。 我怀疑这是因为 URL 长度超过了 2083 个字符。尽管此问题的一些解决方案是将以下标记添加到 reportserver 文件夹和 ReportManager 文件夹中的 web.config 文件,但它对我不起作用。有人可以帮忙吗?

标签-->

错误是由于下拉菜单中的值太多,URL 很可能超过了您指出的最大长度。一个解决方法是在下拉列表本身中创建一个选项 "Select All" 并让存储过程完成其余的工作。

如果您使用查询来填充参数的可用值,您可以执行 UNION 以包含 "Select All" 选项。

请注意,对于此解决方案,您需要有一个用户定义的函数来拆分值,因为 SSRS 会以逗号分隔格式将多个值发送回 SQL 服务器。

CREATE FUNCTION dbo.udf_Split
(    
    @RowData NVARCHAR(MAX),
    @Delimeter NVARCHAR(MAX)
)
RETURNS @RtnValue TABLE 
(
    ID INT IDENTITY(1,1),
    Data NVARCHAR(MAX)
) 
AS
BEGIN 
    DECLARE @Iterator INT
    SET @Iterator = 1

    DECLARE @FoundIndex INT
    SET @FoundIndex = CHARINDEX(@Delimeter,@RowData)

    WHILE (@FoundIndex>0)
    BEGIN
        INSERT INTO @RtnValue (data)
        SELECT 
            Data = LTRIM(RTRIM(SUBSTRING(@RowData, 1, @FoundIndex - 1)))

        SET @RowData = SUBSTRING(@RowData,
                @FoundIndex + DATALENGTH(@Delimeter) / 2,
                LEN(@RowData))

        SET @Iterator = @Iterator + 1
        SET @FoundIndex = CHARINDEX(@Delimeter, @RowData)
    END

    INSERT INTO @RtnValue (Data)
    SELECT Data = LTRIM(RTRIM(@RowData))

    RETURN
END
GO

填充参数可用值的查询如下所示:

SELECT 'Select All' AS "FilterValues"

UNION

SELECT FilterValues
FROM tbl_AvailableValues

您获取数据的过程如下所示:

CREATE PROCEDURE usp_GetData @FilterValues NVARCHAR(MAX)

AS

BEGIN

    IF @FilterValues = 'Select All'
    SELECT *
    FROM tbl_Data;

ELSE 

    SELECT *
    FROM tbl_Data
    WHERE tbl_Data.FilterColumn IN (SELECT DATA FROM udf_Split(@FilterValues,','));

END

GO

希望对您有所帮助