在我的报表服务器数据库中,我所有用户的报表订阅都被保存为 SQL 代理作业,这是正常的。
如果我连接到报表服务器数据库并列出 SQL 代理作业,我会看到一个巨大的作业列表,这些作业以随机字符串命名,例如:
000D5787-8802-4CB1-9784-8897C596003F
通过反复试验,我发现特定的代理工作与我的“每日销售”报告有关,并且我能够查看工作历史记录,将 SQL 命令添加到订阅运行的代码中,等等。
但是,我有数百个用户报告。我需要能够以某种方式将报告的名称与 SQL 代理作业的名称联系起来。要么通过让 Report Server 更有效地命名其订阅作业,要么通过某种查找表,当我向下滚 Action 业列表时可以引用。
有任何想法吗?我试过查看 ReportServer 的“订阅”表,它确实有一些看起来相似的 ID 号,但没有一个与作业名称匹配。
最佳答案
运行以下代码 .. 它应该为您提供所有订阅报告的列表以及作业名称:
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'
关于sql-server - 如何将报表服务器订阅 SQL 代理作业名称链接到它正在运行的报表的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57629730/