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



如果我们的报告电子邮件订阅由于SMTP服务器故障等问题而无法发送,我们必须手动重新发送报告电子邮件。我们有没有办法自动重新发送订阅电子邮件?

我使用了与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>

最大的区别之一是我的捕获了"失败"one_answers"错误"状态。

我希望我能记得我在哪里发现的这个,这样我就可以对它给予适当的赞扬,因为它在很多场合都是救命稻草。

没有自动的方法。

通过查询ReportServer数据库中的"订阅"表,可以获得失败的报告列表以及订阅ID。然后将它连接到Catalog表中,以显示报告的详细信息。

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%'

然后,您可以使用Subscription ID,使用AddEvent函数为每个报表启动订阅。

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

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

相关内容

  • 没有找到相关文章

最新更新