#ssrs-2008
#ssrs-2008
Вопрос:
Это ошибка, которую я получаю: «Ошибка: Sys.WebForms.Исключение PageRequestManagerServerErrorException: при обработке запроса на сервере произошла неизвестная ошибка. Код состояния, возвращенный с сервера, был: 500:». Я подозреваю, что это связано с тем, что длина URL превышает 2083 символа. Несмотря на то, что одним из решений этой проблемы было добавление тега below в файл web.config в папке reportserver и папке ReportManager, у меня это не сработало. Может кто-нибудь, пожалуйста, помогите?
тег —>
Комментарии:
1. Что, если вы выберете более 1 значения, а не все, вы все равно получите ошибку?
2. Спасибо за ваш ответ @pinwar13. Я получаю ошибку только тогда, когда количество выбранных значений превышает определенное число. В остальном отчет работает нормально. Когда я пытаюсь просмотреть отчет на вкладке предварительного просмотра visual studio для SSRS, я не вижу никакой ошибки.
Ответ №1:
Ошибка связана с тем, что в выпадающем меню слишком много значений, а URL-адрес, скорее всего, превышает максимальную длину, как вы отметили. Обходным путем для этого было бы создать в самом раскрывающемся списке опцию «Выбрать все» и позволить хранимой процедуре выполнить остальную работу.
Если вы используете запрос для заполнения доступных значений для параметра, вы можете выполнить ОБЪЕДИНЕНИЕ, чтобы включить опцию «Выбрать все».
Обратите внимание, что в этом решении вам потребуется определенная пользователем функция для разделения значений, поскольку 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
Надеюсь, это поможет
Комментарии:
1. Большое вам спасибо Louie…It сработало! .. но теперь я вижу несколько вариантов «Выбрать все» в моем выпадающем списке ….. в остальном все работает отлично. Еще раз спасибо 🙂