Sql-Server-2005

SQL 代理作業僅顯示為作業 ID

  • November 20, 2014

SQL Server 2005,我在 SSMS 的 SQL Agent>jobs 節點中看到大約 100 個“作業”。它們顯示為十六進製字元串,而不是真實姓名:

如果我查詢 msdb..sysjobs,我會看到一個小得多的作業列表及其對應的 JobName。

那麼這些工作是什麼,我怎樣才能讓它們顯示為他們的真實工作名稱而不是 JobID?

謝謝,彼得

SQL Server 2005,我在 SSMS 的 SQL Agent>jobs 節點中看到大約 100 個“作業”。它們顯示為十六進製字元串,而不是真實姓名:

它們來自報告服務訂閱。

下面的 SQL 將根據實際報告為您提供作業名稱列表

select ScheduleID
   ,Path
   ,name
   ,s.Description
from ReportServer.dbo.catalog c
inner join ReportServer.dbo.Subscriptions s on c.ItemID = s.Report_OID
inner join ReportServer.dbo.ReportSchedule rs on rs.SubscriptionID = s.SubscriptionID

更好(從這個連結得到它):

創建 SQL Server 代理作業以控制報告的計劃執行,並將其儲存在 MSDB 數據庫的 sysjobs 和 sysjobsteps 中。代理作業名稱是一個代表 ScheduleId 的 guid 值(是的,如果您還沒有註意到,這會使您的代理作業列表與一堆 guid 雜亂無章,使您的非訂閱作業難以工作,我們正在聽到你的聲音:)。

select 'Report' = c.Path
   ,'Subscription' = s.Description
   ,'SubscriptionOwner' = uo.UserName
   ,'SubscriptionModBy' = um.UserName
   ,'SubscriptionModDate' = s.ModifiedDate
   ,'ProcessStart' = dateadd(hh, DATEDIFF(hh, Getutcdate(), Getdate()), n.ProcessStart)
   ,'NotificationEntered' = dateadd(hh, DATEDIFF(hh, Getutcdate(), Getdate()), n.NotificationEntered)
   ,'ProcessAfter' = dateadd(hh, DATEDIFF(hh, Getutcdate(), Getdate()), n.ProcessAfter)
   ,n.Attempt
   ,'SubscriptionLastRunTime' = dateadd(hh, DATEDIFF(hh, Getutcdate(), Getdate()), n.SubscriptionLastRunTime)
   ,n.IsDataDriven
   ,'ProcessHeartbeat' = dateadd(hh, DATEDIFF(hh, Getutcdate(), Getdate()), n.ProcessHeartbeat)
   ,n.Version
   ,n.SubscriptionID
from Notifications n
inner join Subscriptions s on n.SubscriptionID = s.SubscriptionID
inner join catalog c on c.ItemID = n.ReportID
inner join Users uo on uo.UserID = s.OwnerID
inner join Users um on um.UserID = s.ModifiedByID

引用自:https://dba.stackexchange.com/questions/72633