Для отчета SSRS с несколькими параметрами выбора, когда я 'выбираю все' для параметра, имеющего длинный список значений, отчет выдает ошибку javascript

Это ошибка, которую я получаю: «Ошибка: Sys.WebForms.PageRequestManagerServerErrorException: при обработке запроса на сервере произошла неизвестная ошибка. Код состояния, возвращенный с сервера: 500:«. Я подозреваю, что это связано с тем, что длина URL-адреса превышает 2083 символа. Несмотря на то, что некоторые из решений этой проблемы заключались в том, чтобы добавить тег ниже в файл web.config в папке сервера отчетов и папке ReportManager, это не помогло мне. Кто-то может помочь?

> - тег

ssrs-2008,

0

Ответов: 1


1 принят

Ошибка связана с наличием слишком большого количества значений в раскрывающемся меню, и URL-адрес, скорее всего, превышает максимальную длину, как вы отметили. Обходным путем для этого было бы создать вариант в раскрывающемся меню «Выбрать все» и оставить хранимую процедуру остальной частью работы.

Если вы используете запрос для заполнения доступных значений параметра, вы можете сделать UNION, чтобы включить опцию «Выбрать все».

Обратите внимание на это решение, вам нужно будет определить определенную пользователем функцию для разделения значений, поскольку SSRS отправляет несколько значений в SQL Server в формате, разделенном запятой.

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

Надеюсь это поможет

SSRS-2008,