SSRS 2008报告未使用存储过程处理



在一个新的SSRS 2008报告中,我将把内联SQL更改为存储过程,因为这是我正在处理的项目的要求。SQL在SSRS 2008报告中运行良好,但在存储过程中存在问题。

显示的错误消息如下:

数据集Msg 8114,级别16,状态1过程spRec的查询执行失败,第0行将数据类型varchar转换为int.时出错

如果我只选择一个报告,存储过程就会工作。但是,如果我选择了两个或多个报告,则会出现上述错误。

SSRS 2008报告在主表列中嵌入了18个表列。这个SSRS主表列内的嵌入式表列将基于用户的报告参数来显示所选择的报告。嵌入的报告将根据报告编号显示。此外,我只希望从SQL返回所选报告的数据。

我希望发生这种情况,因为运行中的数据将超过每个唯一运行所需的数据。注意:返回的数据将采用相同的格式。每个数据行中都会有一列,显示应为哪个报告编号选择数据。

报表参数设置为允许多个值,数据类型=文本。将数据传递给报表参数的数据集如下所示:

  SELECT 'Locator' AS rptName, 1 AS rptValue 
      UNION 
  SELECT 'letter',2  
      UNION 
  SELECT 'Wallet ',  3 
     UNION 
  SELECT 'Cum Stu', 4 
     UNION  
  SELECT 'Attend', 5 
    UNION 
  SELECT  'Test',6 

每个部分之前的SQL看起来像:

IF 1 in (@report) 

 IF 2 in (@report)  

我已尝试将报表参数的属性更改为integer如果上面列出了语句,但它没有起作用。

因此,你能告诉我我能做些什么来解决我的问题吗?

听起来像是从允许最终用户选择多个值的下拉列表中传递值。如果是这种情况,则SSRS将这些值以一个长字符串的形式发送到存储过程。下拉列表中选中的值越多,字符串就越长。如果最终用户只检查一个值,那么在这种情况下一切都会正常(in子句只能处理一个值)。

您有两个选项。选项1。将SSRS下拉列表设为单值下拉列表。

如果这不是一个可行的选择,那么这里是选项2:

您必须使存储过程中@report参数的数据类型类似于(n)varchar(1000);足够长以处理具有所有可能值的字符串的东西。然后,您必须将字符串拆分为单独的值,以便在in子句中使用它们。这是我过去使用过的一个拆分UDF。

CREATE FUNCTION [dbo].[udf_Split] 
   (  @List      varchar(8000), 
      @Delimiter varchar(5)
   ) 
   RETURNS @TableOfValues table 
      (  RowID   smallint IDENTITY(1,1), 
         [Value] varchar(100) 
      ) 
AS 
   BEGIN
      DECLARE @LenString int 
      WHILE len( @List ) > 0 
         BEGIN 
            SELECT @LenString = 
               (CASE charindex( @Delimiter, @List ) 
                   WHEN 0 THEN len( @List ) 
                   ELSE ( charindex( @Delimiter, @List ) -1 )
                END
               ) 
            INSERT INTO @TableOfValues 
               SELECT substring( @List, 1, @LenString )
            SELECT @List = 
               (CASE ( len( @List ) - @LenString ) 
                   WHEN 0 THEN '' 
                   ELSE right( @List, len( @List ) - @LenString - 1 ) 
                END
               ) 
         END
      RETURN 
   END 

一旦你有了它,你就可以把你的代码改成这样。

IF 1 IN (SELECT value FROM dbo.udf_Split(@report, ','))

在您的情况下,您可能需要调整这个UDF来处理整数,但数据类型的隐式转换可能不是问题。或者,将SSRS下拉列表中的数据类型更改为字符串。

最新更新