如何重新发送SSRS订阅电子邮件?

时间:2018-11-12 18:10:00

标签: ssrs-2016

如果由于诸如SMTP服务器失败之类的问题而导致无法发送报告电子邮件订阅,我们必须手动重新发送报告电子邮件。有什么方法可以自动重新触发订阅电子邮件并重新发送?

2 个答案:

答案 0 :(得分:1)

没有自动的方法。

通过查询ReportServer数据库中的Subscriptions表,可以获得失败的报告列表以及Subscription ID。然后将其加入目录表以显示报告详细信息。

SELECT Sub.SubscriptionID,
       Sub.InactiveFlags,
       Sub.ExtensionSettings,
       Sub.Description,
       Sub.LastStatus,
       Sub.EventType,
       Sub.MatchData,
       Sub.LastRunTime,
       Sub.Parameters,
       Sub.DeliveryExtension,
       Cat.Path,
       Cat.Name,
       Cat.Description,
       Cat.Hidden,
       Cat.Parameter,
       Cat.ExecutionFlag,
       Cat.ExecutionTime
FROM [ReportServer].[dbo].[Subscriptions] as Sub
LEFT OUTER JOIN [ReportServer].[dbo].[Catalog] as Cat on
Sub.Report_OID = ItemID
WHERE LastStatus LIKE 'Failure%'

然后,您可以使用AddID函数使用订阅ID来为每个报告触发订阅。

EXEC dbo.AddEvent @EventType = 'TimedSubscription', @EventData = @SUBSCRIPTION_ID;

您可以创建一个存储过程来遍历表并触发订阅。

答案 1 :(得分:1)

我使用了与Hannover Fist发布的方法类似的方法,但是采用了另一种方法来重新激活订阅:

SELECT
     S.ScheduleID AS SQLAgent_Job_Name,
     SUB.Description AS Sub_Desc,
     SUB.DeliveryExtension AS Sub_Del_Extension,
     C.Name AS ReportName,
     C.Path AS ReportPath,SUB.LastStatus
FROM ReportSchedule RS
     INNER JOIN Schedule S ON (RS.ScheduleID = S.ScheduleID)
     INNER JOIN Subscriptions SUB ON (RS.SubscriptionID = SUB.SubscriptionID)
     INNER JOIN [Catalog] C ON (RS.ReportID = C.ItemID AND SUB.Report_OID = C.ItemID)

WHERE LEFT (SUB.LastStatus, 12) Like 'Failure%' or LEFT (SUB.LastStatus, 12) Like 'Error%'
      order by reportname

     USE msdb 
    EXEC sp_start_job @job_name = <SQLAgent_Job_Name>

最大的区别之一是,我的系统同时捕获“失败”和“错误”状态。

我希望我能记得在哪里找到它的,以便我能对它给予应有的赞誉,因为它在某些场合曾挽救了生命。