Reporting services 使用存储过程的SSRS多值参数的值太多

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

我正在编写一个SSRS报告,它使用一个包含一些参数的存储过程

我遇到问题的参数中有1个是因为我可以选择多个项(guid值),并且它们超过了4000+逗号分隔的值

存储过程:proc_GetCompanyRecord

========================================

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”参数,用户可以选择“全选”-请帮助!!