我如何链接SQL服务器作业名称

时间:2009-09-01 14:13:14

标签: sql-server reporting-services

到使用它的SSRS报告服务器进程?该名称看起来像一个guid,但我需要找到使用它的报告服务报告。 非常感谢

2 个答案:

答案 0 :(得分:3)

这是加入时的query I blogged about一段时间:

;WITH cte (job_id, job_name, execution_time, execution_order) 
AS 
( 
SELECT DISTINCT j.job_id 
    ,j.name 
    ,CONVERT(datetime, STUFF(STUFF(run_date,7,0,'/'),5,0,'/') 
        + SPACE(1) 
        + STUFF(STUFF(RIGHT('000000' + CONVERT(varchar(20), run_time), 6),5,0,':'),3,0,':'))
    ,ROW_NUMBER() OVER (PARTITION BY j.job_id ORDER BY CONVERT(datetime, STUFF(STUFF(run_date,7,0,'/'),5,0,'/') 
        + SPACE(1) 
        + STUFF(STUFF(RIGHT('000000' + CONVERT(varchar(20), run_time), 6),5,0,':'),3,0,':')) DESC)
FROM msdb.dbo.sysjobs j  
    INNER JOIN msdb.dbo.syscategories c ON j.category_id = c.category_id
    LEFT OUTER JOIN msdb.dbo.sysjobhistory jh ON j.job_id = jh.job_id 
WHERE c.name ='Report Server'
) 
SELECT 
    x.job_name 
    ,c.name 
    ,x.execution_time
    ,c.path 
    ,su.description 
    ,CONVERT(varchar(max), su.ExtensionSettings) as ExtensionSettings 
    ,'EXEC msdb..sp_start_job ''' + x.job_name + '''' as SQLStatement
FROM cte x 
    INNER JOIN dbo.Schedule sc ON x.job_name = CONVERT(varchar(100), sc.ScheduleID) 
    INNER JOIN dbo.ReportSchedule rs ON sc.ScheduleID = rs.ScheduleID 
    INNER JOIN dbo.Subscriptions su ON rs.SubscriptionID = su.SubscriptionID 
    INNER JOIN dbo.Catalog c ON su.Report_OID = c.ItemID 
WHERE execution_order = 1
ORDER BY 3, 2

答案 1 :(得分:0)

似乎没有一种简单的方法可以找到它。

以下查询列出了订阅ID及其链接的报告

select s.SubscriptionID, c.Path
from ReportServer.dbo.Subscriptions as s
JOIN ReportServer.dbo.Catalog       as c
on   ItemID = Report_OID

然后,在作业步骤中引用订阅ID,格式如下。

exec ReportServer.dbo.AddEvent @EventType='TimedSubscription', @EventData='~subscriptionID~'

应该可以写一个查询来加入它们,但我现在没有时间。我稍后会尝试更新问题。