【问题标题】:Create multiple SSRS reports if there is any new update in database如果数据库中有任何新更新,则创建多个 SSRS 报告
【发布时间】:2018-06-11 18:06:02
【问题描述】:

我们正在生成 SSRS 报告并有 1 个 ID 参数,通过手动输入 ID 将生成 SSRS 报告。

要求: 如果数据库中有任何新 ID,或者数据库中有任何更新,我们希望为该特定 ID 创建 SSRS 报告。

我们每周运行此报告,例如,如果有 15 个 ID 的更新,我们希望为这些特定 ID 提供 15 个新的 SSRS 报告。

【问题讨论】:

  • 与其他人所说的类似,我将创建一个将报告的 ID 存储在表中的过程,然后将任何新结果返回给数据驱动的订阅。

标签: sql visual-studio reporting-services ssrs-2012 ssis-2012


【解决方案1】:

您可以创建一个触发器或过程来截断并将更改输入到“更改”表中,并按所需的时间表运行。

创建一个从该“更改”表中读取的数据驱动订阅。

在插入语句之后执行将触发报表运行的 ReportCommand 脚本。

SELECT  DISTINCT b.job_id,
'EXEC ReportServer.dbo.AddEvent @EventType=''TimedSubscription'', @EventData='''
    + CAST(a.SubscriptionID AS VARCHAR(40)) + '''' AS ReportCommand ,
    e.Name,
    b.name AS JobName ,
    a.SubscriptionID ,
    e.Name ,
    e.Path ,
    d.Description ,
    d.LastStatus,
    d.LastRunTime
FROM    ReportServer.dbo.ReportSchedule a
    JOIN msdb.dbo.sysjobs b ON a.ScheduleID = b.name
    JOIN ReportServer.dbo.ReportSchedule c ON b.name = CONVERT(VARCHAR(50),c.ScheduleID)
    JOIN ReportServer.dbo.Subscriptions d ON c.SubscriptionID = d.SubscriptionID
    JOIN ReportServer.dbo.Catalog e ON d.Report_OID = e.ItemID
WHERE  e.Path LIKE '%path%'

EXEC ReportServer.dbo.AddEvent @EventType='TimedSubscription', @EventData='123214134-13242-4890-A3D3424-D23423D17E6CBD'

【讨论】:

    【解决方案2】:

    根据您的示例,您可以在每次运行报告时将生成报告的 ID 存储在表格中。然后,当您在下周重新运行它时,它会找到所有 newId 并为它们运行。或者,您可以根据上次运行报告的时间戳执行类似的查询,并在记录上创建日期,查找上次报告运行后创建的记录。

    不知道报告的作用,与其为 1 个 ID 运行一次,不如为多个 ID 运行它并使用分页符。

    或者循环遍历每个 ID,在 reportServer 数据库中调整订阅元数据中的条件,然后执行订阅创建的 SQL 代理作业以生成具有新 ID 的新报告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-20
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多