多值参数截断

时间:2012-11-30 10:40:20

标签: sql reporting-services sqldatatypes reportparameter

在我的SSRS报告中,我有一个多值参数,其中包含250多个uniqueidentifier数据类型值。这可以在参数下拉列表中选择一小部分值,但是当用户选择(全选)时,会出现此错误:

An error occurred during local report processing.
String or binary data would be truncated. 

每个uniqueidentifier字段长度为36个字符,这意味着其中250个加在一起会产生9000个字符的字符串。这就是导致截断的原因。

我应该采取什么方法来处理这种情况?

修改

存储过程的几个快照:

ALTER PROCEDURE [dbo].[spReport]
     @StartDate as datetime
    ,@EndDate as datetime
    ,@LocationId uniqueidentifier
    ,@UserIds uniqueidentifier

@UserIds是多值参数。它用在查询的where子句中:

WHERE (U.UserId IN (@UserIds) OR @UserIds IS NULL)

3 个答案:

答案 0 :(得分:1)

SSRS确实限制了多值参数的大小。我不记得它是什么,但我觉得你已经超越了它。 (SSRS将多值参数转换为逗号分隔的字符串,并使用字符串替换查询中变量名称的出现。)

正如评论中所提到的,你有两个问题:

  1. SP不能直接从SSRS获取多值参数。你需要做一些操作。
  2. 您的整体参数长度。这可能需要一点点创造力才能解决。一些选择:

    • 您可以在<All Users>的现有参数中提供单独的参数或特殊值,然后在SP中检查这一点,在这种情况下返回所有值。如果查询直接在SSRS(而不是SP)中,则可以使用以下内容:

      ...WHERE ( U.UserId in ( @UserIds) OR '<All Users>' in ( @UserIds ) )
      ...
      
    • 您可以根据之前的参数过滤参数中的项目数吗?例如让用户选择日期范围和/或部门,并仅返回与该范围匹配的UID?

答案 1 :(得分:1)

您不能将SSRS多值参数与此类存储过程一起使用。您需要加入报表中的值,将它们作为varchar(max)传递,然后在存储过程中将它们拆分:
https://stackoverflow.com/a/9862901/124386
http://www.codeulike.com/2012/03/ssrs-multi-value-parameters-with-less.html

答案 2 :(得分:0)

另一种方法是创建用户定义的表类型,并使用它而不是varchar来传入选定的值。