在我的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)
答案 0 :(得分:1)
SSRS确实限制了多值参数的大小。我不记得它是什么,但我觉得你已经超越了它。 (SSRS将多值参数转换为逗号分隔的字符串,并使用字符串替换查询中变量名称的出现。)
正如评论中所提到的,你有两个问题:
您的整体参数长度。这可能需要一点点创造力才能解决。一些选择:
您可以在<All Users>
的现有参数中提供单独的参数或特殊值,然后在SP中检查这一点,在这种情况下返回所有值。如果查询直接在SSRS(而不是SP)中,则可以使用以下内容:
...WHERE ( U.UserId in ( @UserIds) OR '<All Users>' in ( @UserIds ) )
...
答案 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来传入选定的值。