Reporting services 使用存储过程的SSRS多值参数的值太多
我正在编写一个SSRS报告,它使用一个包含一些参数的存储过程 我遇到问题的参数中有1个是因为我可以选择多个项(guid值),并且它们超过了4000+逗号分隔的值 存储过程:proc_GetCompanyRecord ========================================Reporting services 使用存储过程的SSRS多值参数的值太多,reporting-services,ssrs-2008,dynamics-crm-2011,Reporting Services,Ssrs 2008,Dynamics Crm 2011,我正在编写一个SSRS报告,它使用一个包含一些参数的存储过程 我遇到问题的参数中有1个是因为我可以选择多个项(guid值),并且它们超过了4000+逗号分隔的值 存储过程:proc_GetCompanyRecord ======================================== CREATE PROCEDURE [dbo].[proc_GetCompanyRecord] ( @Year AS VARCHAR(MAX) = NULL, @CoreCompa
CREATE PROCEDURE [dbo].[proc_GetCompanyRecord]
(
@Year AS VARCHAR(MAX) = NULL,
@CoreCompanyId AS VARCHAR(MAX) = NULL,
@CompanyId AS VARCHAR(MAX) = NULL,
@OwnerId VARCHAR(MAX) = NULL
)
--THE REST OF MY QUERY HERE WHICH PULLS ALL OF THE NEEDED COLUMNS
WHERE CoreCompany.CoreCompanyId in (SELECT * FROM ufnSplit (@CoreCompanyId, ','))
AND Company.CompanyId in (SELECT * FROM ufnSplit (@CompanyId, ','))
========================================
CREATE PROCEDURE [dbo].[proc_GetCompanyRecord]
(
@Year AS VARCHAR(MAX) = NULL,
@CoreCompanyId AS VARCHAR(MAX) = NULL,
@CompanyId AS VARCHAR(MAX) = NULL,
@OwnerId VARCHAR(MAX) = NULL
)
--THE REST OF MY QUERY HERE WHICH PULLS ALL OF THE NEEDED COLUMNS
WHERE CoreCompany.CoreCompanyId in (SELECT * FROM ufnSplit (@CoreCompanyId, ','))
AND Company.CompanyId in (SELECT * FROM ufnSplit (@CompanyId, ','))
函数:[dbo].[ufnSplit]
CREATE FUNCTION [dbo].[ufnSplit]
(
@RepParam varchar(MAX),
@Delim char(1)
)
RETURNS @Values TABLE (Item UNIQUEIDENTIFIER)
AS
BEGIN
DECLARE @chrind INT
DECLARE @Piece varchar(MAX)
SELECT @chrind = 1
WHILE @chrind > 0
BEGIN
SELECT @chrind = CHARINDEX(@Delim,@RepParam)
IF @chrind > 0
SELECT @Piece = LEFT(@RepParam,@chrind - 1)
ELSE
SELECT @Piece = @RepParam
INSERT @Values(Item) VALUES(@Piece)
SELECT @RepParam = RIGHT(@RepParam,LEN(@RepParam) - @chrind)
IF LEN(@RepParam) = 0 BREAK
END
RETURN
END
当我试图通过向@CompanyId参数提供4000+个值来运行存储过程时,它工作正常并返回所有可能的记录
但在我将报告部署到CRM中后,运行它并单击“查看报告”,它会显示以下错误:“发生了错误”
我对其进行了诊断,发现4000+guid逗号的计算值对于存储过程和语句中来说太多了:
Msg 8152,级别16,状态10,第7行字符串或二进制数据
截断的
请帮忙 当您进行@CompanyID参数查询时。为“全选”添加一个选项
SELECT 'Select All' AS CompanyID, 1 as myOrder
UNION
Select CAST(CompanyID AS VARCHAR), 2 as myOrder
FROM CompanyTable
ORDER BY myOrder
用户不必选择所有4000个值,只需选择“全选”选项,即可选择所有值。并更新proc_getCompanyRecord以处理CompanyID的新“全选”值
CREATE PROCEDURE [dbo].[proc_GetCompanyRecord]
(
@Year AS VARCHAR(MAX) = NULL,
@CoreCompanyId AS VARCHAR(MAX) = NULL,
@CompanyId AS VARCHAR(MAX) = NULL,
@OwnerId VARCHAR(MAX) = NULL
)
--THE REST OF MY QUERY HERE WHICH PULLS ALL OF THE NEEDED COLUMNS
WHERE CoreCompany.CoreCompanyId in (SELECT * FROM ufnSplit (@CoreCompanyId, ','))
AND (Company.CompanyId in (SELECT * FROM ufnSplit (@CompanyId, ',')) OR Company.CompanyID = 'Select All')
你需要重新评估你的方法。将4000多个字符的参数传递给报表的原因是什么?是用户选择了多个值还是以编程方式传递?@AnupAgrawal不是以编程方式传递的,它只是一个SSRS报告,让用户选择多个值。我们有4000多家公司用于“@CompanyId”参数,用户可以选择“全选”-请帮助!!