【问题标题】:How to link Report Server Subscription SQL Agent Job name to the name of the report it is running如何将报表服务器订阅 SQL 代理作业名称链接到它正在运行的报表的名称
【发布时间】:2023-03-18 00:58:01
【问题描述】:

在我的报表服务器数据库上,我所有用户的报表订阅都保存为 SQL 代理作业,这是正常的。

如果我连接到报表服务器数据库并列出 SQL 代理作业,我会看到一个巨大的作业列表,命名为随机字符串,例如:

000D5787-8802-4CB1-9784-8897C596003F

通过反复试验,我发现特定代理作业与我的“每日销售”报告相关,并且我能够查看作业历史记录,将 SQL 命令添加到订阅运行的代码中,等等

但是,我有数百个用户报告。我需要能够以某种方式将报告的名称与 SQL 代理作业的名称联系起来。要么让 Report Server 更方便地命名其订阅作业,要么拥有某种查找表,当我向下滚动作业列表时可以参考。

有什么想法吗?我试过查看 ReportServer 的“订阅”表,它确实有一些看起来相似的 ID 号,但没有一个与作业名称匹配。

【问题讨论】:

  • 在我看来,这是一个糟糕的“设计”功能。我将所有 SSRS 计划创建为随机时间(例如当天 21:21)的“一次性”运行,禁用 SSRS 创建的作业并将其中的 SQL 放入我自己的作业和步骤中。
  • 在下面查看 Harry 的解决方案,效果很好!

标签: sql-server reporting-services sql-server-2016


【解决方案1】:

运行以下代码 .. 它应该为您提供所有订阅报告的列表以及作业名称:

SELECT distinct
sj.[name] AS [Job Name],
rs.SubscriptionID,
c.[Name] AS [Report Name],
c.[Path]


FROM msdb..sysjobs AS sj 

INNER JOIN ReportServer..ReportSchedule AS rs
ON sj.[name] = CAST(rs.ScheduleID AS NVARCHAR(128)) 

INNER JOIN ReportServer..Subscriptions AS su
ON rs.SubscriptionID = su.SubscriptionID

INNER JOIN ReportServer..[Catalog] c
ON su.Report_OID = c.ItemID

然后您可以通过运行以下命令来触发作业:

USE [msdb]
EXEC sp_start_job @job_name = '[Job Name] from above query'

【讨论】:

    猜你喜欢
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多