对于具有多个 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
希望对您有所帮助
这是我得到的错误:"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
希望对您有所帮助