Sql server 数据驱动订阅的动态调度

Sql server 数据驱动订阅的动态调度,sql-server,reporting-services,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(v

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

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
因此,通过查询,我可以获得所有必需的字段、电子邮件收件人、时间和报告参数

我想使用时间参数来安排报告。 e、 g.如果时间是9:30,则应在上午9:30等时间邮寄报告。
我想从SQL或数据库前端实现这一点,而不是从C#。如何做到这一点

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

更进一步

  • 您可以将报告发送放在ServiceBroker中,它将确保报告以异步方式发送到您的计划检查器作业

  • 创建用于发送报告的队列表,主作业将向其插入发送请求。 此外,您可以有5个作业读取1-2个请求并发送它们,但在这种情况下,您会延迟作业计划

  • 希望这有帮助

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

    更进一步

  • 您可以将报告发送放在ServiceBroker中,它将确保报告以异步方式发送到您的计划检查器作业

  • 创建用于发送报告的队列表,主作业将向其插入发送请求。 此外,您可以有5个作业读取1-2个请求并发送它们,但在这种情况下,您会延迟作业计划

  • 希望这有帮助

    结合上面建议的计划表,您可以使用以下内容通过TSQL发送报告,使用@report\u 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
    

    结合上面建议的计划表,您可以使用以下内容通过TSQL发送报告,使用@report\u 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
    

    据我所知,您希望基于WorkProjectReportTime的报告交付,它来自tblConfig。报表的WorkProjectionReportTime值多久更改一次?是否存在定期更改tblConfig中的值的进程?您答对了。tblConfig中的值可由用户从Web UI进行配置。他只能在任何时间以HH:MM格式设置任何值。据我所知,您希望根据来自tblConfig的WorkProjectReportTime的报告交付。报表的WorkProjectionReportTime值多久更改一次?是否存在定期更改tblConfig中的值的进程?您答对了。tblConfig中的值可由用户从Web UI进行配置。他只能在任何时候以HH:MM格式设置任何值。SSR是否适用于ServiceBroker概念?因为我发现很难使用自己的计划表并调用Events,所以SSR在ServiceBroker概念上起作用吗?因为我发现很难使用自己的计划表并调用事件