如果数据库中有任何新更新,则创建多个SSRS报告

时间:2018-06-11 18:06:03

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

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

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

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

2 个答案:

答案 0 :(得分:2)

您可以创建一个触发器或过程,将更改截断并输入到"更改"表,按期望的时间表运行。

创建一个数据驱动的订阅,从中读取"更改"表

在Insert Statement之后执行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'

答案 1 :(得分:0)

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

不知道报告的作用,而不是为1个id运行一次,为许多ID运行它并使用分页符。

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