У меня есть запрос (незаконченный), который получает общую информацию SysJob / ReportServer.Единственная проблема, с которой я столкнулся - это попытка получить имя хранимой процедуры, используемой в отчете SSRS.Я пробовал несколько запросов, но в своей текущей попытке я попытался получить имя процедуры из столбца sysjobsteps.command
, к сожалению, он содержит только столбец Subscriptions.SubscriptionID
, который при отслеживании этой таблицы также ни к чему меня не приводит ... Есть идеи?Спасибо!
SELECT JOBS.Name AS [JobName(ID)]
, CAT.Name AS [CatName]
, SCH.SubscriptionID,
, SUB.LastRunTime
, STEPS.command -- @eventData = ReportSchedule.SubscriptionID
FROM msdb.dbo.sysjobs JOBS
INNER JOIN msdb.dbo.sysjobsteps STEPS ON JOBS.job_id = STEPS.job_id
INNER JOIN ReportServer.dbo.ReportSchedule SCH ON JOBS.name = CAST(SCH.ScheduleID AS sysname)
INNER JOIN ReportServer.dbo.Subscriptions SUB ON SCH.SubscriptionID = SUB.SubscriptionID
INNER JOIN ReportServer.dbo.Catalog CAT ON SUB.Report_OID = CAT.ItemID
WHERE JOBS.enabled = 1
ORDER BY CAT.Name
Пример данных в столбце "sysjobsteps.command":
exec [ReportServer].dbo.AddEvent @EventType='TimedSubscription', @EventData='f3296cc8-79e1-4a99-9723-c1880da25a8d'
РЕШЕНИЕ (грязно, но работает):
SELECT REPLACE(LEFT(SUBSTRING(CAST(CONVERT(xml, CONVERT(varbinary(max), CAT.content)) AS VARCHAR(MAX)),
CHARINDEX('<CommandText>', CAST(CONVERT(xml, CONVERT(varbinary(max), CAT.content)) AS VARCHAR(MAX))), 150),
CHARINDEX('</CommandText>', SUBSTRING(CAST(CONVERT(xml, CONVERT(varbinary(max), CAT.content)) AS VARCHAR(MAX)),
CHARINDEX('<CommandText>', CAST(CONVERT(xml, CONVERT(varbinary(max), CAT.content)) AS VARCHAR(MAX))), 150)) - 1),
'<CommandText>', '') AS ProcName
FROM ReportServer.dbo.Catalog