动态调度数据驱动订阅

时间:2012-10-18 05:05:04

标签: sql-server reporting-services

我有一个数据驱动订阅,可以在特定时间向电子邮件别名发送报告。 在订阅查询中:

select WorkProjectionReportTime,WorkProjectionReportToMailAlias,
'Work Projection Report for the period ' + CONVERT(varchar(10),GETDATE()-31,101)+ ' to '+CONVERT(varchar(10),GETDATE()-1,101) as Subject,
CONVERT(varchar(10),GETDATE()-31,101) as FromDate,CONVERT(varchar(10),GETDATE()-1,101) as ToDate, 60 as WO, 
'Please see the attachment for the details' as body
from tblConfig
Pivot ( MAX(cValue) for cKey in (WorkProjectionReportTime,WorkProjectionReportToMailAlias) ) as xyz

因此,通过查询,我获得了所有必填字段,Email To,Time,report parameters。

我想使用time参数来安排报告。 例如如果时间是9:30,报告应该在上午9:30等邮寄。 我想从SQL或数据库前端而不是从C#实现这一点。怎么做到这一点?

2 个答案:

答案 0 :(得分:1)

结合上面建议的调度表,您可以使用以下命令通过TSQL发送报告,使用@report_path作为参数:

SELECT 'exec ReportServer.dbo.AddEvent @EventType=''TimedSubscription'', 
             @EventData=''' + CONVERT(VARCHAR(max), rs.SubscriptionID) + ''''
FROM   ReportServer.dbo.Catalog c,
       ReportServer.dbo.ReportSchedule rs,
       ReportServer.dbo.Schedule s
WHERE      rs.ReportID = c.ItemID
       AND rs.ScheduleID = s.ScheduleID
       AND c.path = @report_path
       AND s.RecurrenceType = 1 -- only the ones with the regular scheduling disabled

答案 1 :(得分:0)

您可以创建每分钟运行的作业,并检查是否有要发送和发送的报告。但这意味着您将延迟最多1分钟+“报告运行所需的时间”。

更多

  1. 您可以在服务代理中发送报告,它将确保将报告异步发送到您的计划检查程序作业。
    1. 为报告发送创建排队表,主要作业将向其发送发送请求。 此外,您可以拥有5个读取1-2个请求并发送它们的作业,但在这种情况下,您将延迟作为作业计划。
    2. 希望这会有所帮助。