如果我在 SSRS 中有两个来自存储过程的数据集,我可以在它们之间传递数据吗?

If I have two Datasets in SSRS which are from stored procedures, can I pass data between them?

我有一个 SSRS 报告,它创建了一个包含客户 ID 及其相关批次代码的多页报告。

我通过在 "Sent" table 中记录已发送的客户 ID 来实现此目的,然后加入该 ID 以排除已发送的 ID。

第 1 页来自一个存储过程,第 2 页来自另一个存储过程。

Stored Proc 1 / Page 1 是 select 客户帐户,包括尚未 selected 的批处理代码,然后存储过程将这些详细信息记录到已发送的 table:

--Select new records for report into temp table
     SELECT a.CustomerID,
            a.BatchCode
       INTO #CustomersToSend
       FROM dbo.CustomerBatches a
  LEFT JOIN dbo.Sent b ON a.CustomerID = b.CustomerID
      WHERE b.SentDate IS NULL

--Insert these records into the sent table
INSERT INTO dbo.Sent
     SELECT CustomerID,
            GETDATE() AS SentDate
       FROM #CustomersToSend

--Select the temp table to produce the report output
     SELECT * 
       FROM #CustomersToSend

Stored Proc 2 需要是第 1 页中包含的批代码的摘要:

--Batch Summary
     SELECT BatchCode,
            COUNT(*) AS TotalCustomers
       FROM dbo.CustomerBatches
   GROUP BY BatchCode

我需要以与筛选第一个查询相同的方式来筛选此查询,排除任何已发送的 CustomerID。

我的问题是我不知道 SSRS 如何处理此类报告。

如果它 运行s 存储过程 1,等待它完成,然后 运行s 存储过程 2,那么很好,我可以使用 dbo.Sent 中的 SentDate 来过滤在最后几秒发送的 CustomerIDs 上。

如果 运行 同时存储过程 1 和过程 2,那么我可能会使用与存储过程 1 相同的逻辑,左连接到 dbo.Sent 以排除发送了 CustomerID。我不确定如果存储过程 2 在存储过程 1 试图写入 dbo.Sent 的那一刻 运行 会发生什么,但是...

理想情况下,我会先 运行 存储过程 2,等待它完成,然后 运行 存储过程 1。但是我从存储过程 1 的输出 必须 成为报告的第 1 页。我想如果它 运行 它们是串行的而不是并行的,那么它会按页面顺序进行吗?

任何帮助/见解将不胜感激。

好的,所以我做了一些挖掘,SSRS 恰好同时触发了两个存储过程。

这是好是坏。不好,因为我无法在报告 运行 期间将任何数据从一个过程传递到另一个过程,但是很好,因为这意味着只要我的两个查询在开始时是相同的,它们就应该完成构建临时 table 在同一时间。

所以我的存储过程 1 保持不变,但我的存储过程 2 现在是这样的:

--Select new records for report into temp table
   SELECT a.CustomerID,
          a.BatchCode
     INTO #CustomersToSend2
     FROM dbo.CustomerBatches a
LEFT JOIN dbo.Sent b ON a.CustomerID = b.CustomerID
    WHERE b.SentDate IS NULL

--Batch Summary
   SELECT BatchCode,
          COUNT(*) AS TotalCustomers
     FROM #CustomersToSend2
 GROUP BY BatchCode

由于两个查询 运行 是并行的,所以它们在同一时刻开始时就完成了临时 table 的构建(在查询 1 有机会开始向 [=21 添加行之前=]) 所以他们在各自的温度 tables.

中都有完全相同的数据

我想唯一的风险是,如果有一些问题阻止了查询 2 的启动,但并没有阻止查询 1 的启动,我的摘要中可能没有结果,但我认为应该没问题。

我建议只使用一个数据集。您可以在第二页的摘要 table 中重复使用您的第一个数据集,将 table 中的记录按 BatchCode 分组,然后让 SSRS 进行计数。