【问题标题】:SSRS SQL-Restart subscription runs all scheduled ReportsSSRS SQL-Restart 订阅运行所有计划的报告
【发布时间】:2023-03-18 11:01:01
【问题描述】:

我正在使用以下 SQL 脚本重新启动失败的 SSRS 邮件订阅:

DECLARE @ScheduledReportName varchar(200)
DECLARE @JobID uniqueidentifier
DECLARE @LastRunTime datetime
Declare @JobStatus Varchar(100)
--------------------------------------------------------
DECLARE @RunAllReport CURSOR
SET @RunAllReport = CURSOR FAST_FORWARD
FOR
SELECT 
CAT.[Name] AS RptName
, res.ScheduleID AS JobID
, sub.LastRuntime
, CASE WHEN job.[enabled] = 1 THEN 'Enabled'
ELSE 'Disabled'
END AS JobStatus

FROM
dbo.Catalog AS cat
INNER JOIN dbo.Subscriptions AS sub
ON CAT.ItemID = sub.Report_OID
INNER JOIN dbo.ReportSchedule AS res
ON CAT.ItemID = res.ReportID
AND sub.SubscriptionID = res.SubscriptionID
INNER JOIN msdb.dbo.sysjobs AS job
ON CAST(res.ScheduleID AS VARCHAR(36)) = job.[name]
INNER JOIN msdb.dbo.sysjobschedules AS sch
ON job.job_id = sch.job_id
INNER JOIN dbo.Users U
ON U.UserID = sub.OwnerID

----------------Filter der Subscriptions----------------

where sub.subscriptionid in
(
SELECT subscriptionid
FROM Subscriptions AS S
LEFT OUTER JOIN [Catalog] AS C
ON C.ItemID = S.Report_OID
WHERE S.LastStatus like 'Failure sending mail%'
)

----------------Filter der Subscriptions----------------

ORDER BY U.UserName, RptName 
OPEN @RunAllReport
FETCH NEXT FROM @RunAllReport
INTO @ScheduledReportName,@JobID,@LastRunTime,@JobStatus
WHILE @@FETCH_STATUS = 0
BEGIN
Print @ScheduledReportName --&' ' & @JobID
EXEC msdb.dbo.sp_start_job @job_name =@JobID
FETCH NEXT FROM @RunAllReport
INTO @ScheduledReportName,@JobID,@LastRunTime,@JobStatus
END
CLOSE @RunAllReport
DEALLOCATE @RunAllReport 

如果下标失败,我会运行它。在我的示例中,我将相同的报告作为具有不同参数的订阅发送给多个人。有时一个订阅失败,我想重新开始工作。上面脚本中的查询提供了失败的具体订阅ID。

但是,即使 ScheduleID 已作为 JobID 移交,所有报告仍在重新发送给所有人。 脚本有问题吗?

请帮帮我。

【问题讨论】:

    标签: tsql reporting-services


    【解决方案1】:

    原来我的旧查询中的过程:

    EXEC msdb.dbo.sp_start_job @job_name =@JobID
    

    运行 ScheduleID 作为 JobID 下的所有订阅。因此,所有带有 SharedSchedule 的 Report 都会通过重新启动作业重新启动。

    要仅重新启动特定的订阅,我必须在其位置运行以下命令,使用订阅 ID 而不是 scheduleID:

    exec [dbo].[AddEvent] 'TimedSubscription', @SubscriptionID;
    

    这会将一个事件添加到 [dbo].[Event] 表中,该表将运行参数中传递的订阅。所以只会发送所需的报告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      相关资源
      最近更新 更多