SSRS仅返回子嵌套存储过程数据

时间:2016-02-06 05:37:18

标签: sql-server reporting-services ssrs-2008

在SSRS中,我通过调用调用子存储过程的存储过程来创建数据集,依此类推。有4个嵌套存储过程。每个调用存储过程都有一个参数,以避免显示数据,而是将其嵌入到全局临时表中。这允许我仅显示父存储过程中的数据。

即使存储过程中存在依赖问题,我也这样做,所以我可以:

  1. 重复使用存储过程逻辑,因为每个父存储过程都基于子存储过程的数据构建
  2. 根据我正在调用的嵌入式子存储过程检索不同类型的数据。
  3. 避免重复与每个存储过程构建在其子级上相同的逻辑
  4. 例如:

    DECLARE @SqlString NVARCHAR(2000)
    DECLARE @ParamDef NVARCHAR(2000)
    
    SET @SqlString = N'EXEC ClaimantFinancePaymentCategories @param1'
    SET @ParamDef = N'@param1 int'
    
    EXECUTE sp_executesql @SqlString ,@ParamDef, @param1 = 1 -- view the data
    

    存储过程ClaimantFinancePaymentCategories调用另一个嵌套存储过程:

    DECLARE @SqlString NVARCHAR(2000)
    DECLARE @ParamDef NVARCHAR(2000)
    
    SET @SqlString = N'EXEC ClaimantFinancePaymentSubCategories @param1'
    SET @ParamDef = N'@param1 int'
    
    EXECUTE sp_executesql @SqlString ,@ParamDef, @param1 = 0 -- view the data
    

    等等。在SSRS中,当我运行“查询设计器”时返回父数据集,但当父存储过程只有一个嵌入式存储过程时,SSRS显示父存储过程的数据列。

    不幸的是,在调用2个嵌套的子存储过程之后,SSRS显示来自最嵌入的子存储过程的数据列,而不显示来自父存储过程的数据列。

    我尝试使用嵌入式子级存储过程中的用户定义表而不是全局临时表来返回数据,但是我得到了相同的结果。

    有什么建议吗?

1 个答案:

答案 0 :(得分:0)

在报表数据集中,您可以使用正确的列声明临时表。将父存储过程的结果插入其中,如下所示:

INSERT INTO #tempTable 
EXECUTE sp_executesql @SqlString ,@ParamDef, @param1 = 1

然后从临时表中选择*。这将允许报告填充正确的列。