该错误是由于下拉菜单中的值过多,并且 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
希望对你有帮助