3

在我的 SSRS 报告中,我有一个包含 250 多个唯一标识符数据类型值的多值参数。这适用于参数下拉列表中的少量值选择,但是当用户选择(全选)时,他们会收到此错误:

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)
4

3 回答 3

1

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

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

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

    • 您能否在现有参数中提供单独的参数或特殊值,<All Users>然后在 SP 中检查,在这种情况下返回所有值。如果查询直接在 SSRS(而不是 SP)中,这样的事情会起作用:

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

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

于 2012-12-06T12:41:30.643 回答
0

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

于 2014-09-30T21:43:19.330 回答