的錯誤是由於在下拉菜單中有太多值和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
希望這幫助
如果您選擇的值超過1個,但不是全部,仍會出現錯誤? – p2k
感謝您的回覆@ pinwar13.I只有當選定值的數量超過特定數字時纔會出現錯誤。其他方面,報告工作正常。當我嘗試從Visual Studio的預覽選項卡預覽SSRS報告時,我看不到任何錯誤。 –