2016-10-14 58 views
0

這是我得到的錯誤:「錯誤:Sys.WebForms.PageRequestManagerServerErrorException:An處理服務器上的請求時發生未知錯誤,服務器返回的狀態碼爲:500:「。 我懷疑這是因爲URL長度超過了2083個字符。即使這個問題的一些解決方案是將以下標記添加到reportserver文件夾和ReportManager文件夾中的web.config文件,但它對我而言並不適用。有人可以幫忙嗎?對於具有多個選擇參數的SSRS報告,當我爲具有長列表值的參數選擇全部時,報告會拋出javascript錯誤

標籤 - >

+0

如果您選擇的值超過1個,但不是全部,仍會出現錯誤? – p2k

+0

感謝您的回覆@ pinwar13.I只有當選定值的數量超過特定數字時纔會出現錯誤。其他方面,報告工作正常。當我嘗試從Visual Studio的預覽選項卡預覽SSRS報告時,我看不到任何錯誤。 –

回答

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 

希望這幫助

+0

非常感謝Louie ......它的工作!..但我可以在我的下拉列表中看到多個'Select All'選項.....除此之外,它的工作原理完美無缺。再次感謝 :) –