0

我们有不同的派对钥匙列表(大约 20000 个),每周我们都会为特定的派对钥匙创建报告,只有更新。这些聚会密钥存储在定期审查列表中。

定期审查列表 = 已更新的派对密钥

例如,第一周 180 个派对钥匙 第二周 300 个派对钥匙 第三周 30 个派对钥匙在定期审查列表中。

所以现在我有 SSRS 报告,它的参数名为派对密钥,通过手动输入派对密钥,它将生成报告。

但我想自动化这个过程,并希望自动生成特定方密钥的报告,这些密钥在共享文件夹中具有更新和存储为 PDF。

如果本周他们在审核列表中有 40 个派对密钥,我想为这些密钥创建 40 个 SSRS 报告。


Microsoft Visual Studio Enterprise 2015 版本 14.0.25420.01 更新 3 Microsoft .NET Framework 版本 4.7.02053

SQL Server 数据工具 14.0.61021.0 Microsoft SQL Server 数据工具

SQL Server Reporting Services 13.0.1701.8 Microsoft SQL Server Reporting Services Designers 版本 13.0.1701.8

4

1 回答 1

1

如果您有权访问报告数据库,则可以轻松地将订阅参数更新为列表中的新键,并运行发送该订阅的作业。基本上,您可以执行一些任务来获取处理的最后一个密钥、查找所有新密钥、更新订阅、触发每个新密钥的订阅作业。

这是我的一些查询,您可以在其中找到订阅和作业名称之间的链接:

SELECT     
 s.subscriptionid,
 ISNULL(c_p.Name, c.Name) AS Report, 
 msdb.dbo.sysjobs.name AS SQLAgentName, 
 CASE WHEN c.Type = 4 THEN c.Name + ' [' + s.Description + ']' ELSE s.Description end AS Description, 
MAX(s.LastRunTime) AS LastRun, s.LastStatus, 
                      s.DeliveryExtension, c.Description AS HowOften, msdb.dbo.sysjobs.job_id, msdb.dbo.sysjobs.enabled
FROM  dbo.Catalog AS c 
 LEFT JOIN dbo.Catalog AS c_p
  ON c_p.ItemID = c.LinkSourceID AND c.Type = 4
INNER JOIN dbo.Subscriptions AS s 
  ON s.Report_OID = c.ItemID 
INNER JOIN dbo.ReportSchedule 
 ON c.ItemID = dbo.ReportSchedule.ReportID 
    AND s.SubscriptionID = dbo.ReportSchedule.SubscriptionID 
INNER JOIN msdb.dbo.sysjobs 
ON CAST(dbo.ReportSchedule.ScheduleID AS varchar(100)) 
   = CAST(msdb.dbo.sysjobs.name AS varchar(100))
where msdb.dbo.sysjobs.enabled = 1
GROUP BY s.subscriptionid, c_p.Name, c.type, c.Name, msdb.dbo.sysjobs.name, s.Description, s.LastStatus, s.DeliveryExtension, c.Description, msdb.dbo.sysjobs.job_id, msdb.dbo.sysjobs.enabled

修改 dbo.Subscription 参数并调用 exec msdb.dbo.sp_start_job @job_name = @JobName; 以完成您的任务。

于 2018-06-19T14:24:12.657 回答