Могут ли отчеты SSRS запускаться из сценариев Shell? - PullRequest
1 голос
/ 01 апреля 2020

Можем ли мы запускать отчеты SSRS, используя язык сценариев оболочки. Я знаю о RS.exe, будет ли он полезен для запуска отчета SSRS через сценарий Shell?

Заранее спасибо.

1 Ответ

0 голосов
/ 01 апреля 2020

Вы можете инициировать подписку на отчет с помощью SQL, поэтому я полагаю, что вы можете сделать это с помощью сценария оболочки.

Подписки на отчеты являются заданиями на сервере, поэтому вам необходимо знать для них идентификатор вакансии. работать. Затем вы можете запустить с помощью:

use msdb;
exec sp_start_job @job_name = '';

job_name из таблицы dbo.Schedule в базе данных ReportServer. Вы можете использовать что-то вроде этого скрипта, чтобы выяснить это:

declare @SearchString as nvarchar(100) = '';


with [SubscriptionXML] as 
(
    select 
        sb.SubscriptionID,
        cast(sb.ExtensionSettings as xml) as [ExtensionSettingsXML]
    from dbo.Subscriptions as [sb]
    inner join dbo.[Catalog] as [c] on sb.Report_OID = c.ItemID
where c.[Name] like '%' + @SearchString + '%'
),
[SettingsCTE] as 
(
    select 
        sxml.SubscriptionID,
        isnull([xml].Settings.[value]('(./*:Name/text())[1]', 'nvarchar(1024)'), 'Value') as [SettingName],
        [xml].Settings.[value]('(./*:Value/text())[1]', 'nvarchar(max)') as [SettingValue]
    from [SubscriptionXML] as [sxml]
        cross apply sxml.ExtensionSettingsXML.nodes('//*:ParameterValue') as [xml](Settings)
)
select
     s.ScheduleID as [SQLAgentJobName],
     c.[Name] as [ReportName],
     scteSubject.SettingValue as [Subject],
     scteTo.SettingValue as [To],
     scteBCC.SettingValue as [BCC],
     case s.RecurrenceType
        when 1
            then 'Once'
        when 2
            then 'Hourly'
        when 3
            then 'Daily'
        when 4
            then 'Weekly'
        else 'Monthly'
    end as [SubscriptionScheduleType],
    c.[Path] as [ReportPath],
    s.[LastRunTime]
from dbo.ReportSchedule as [rs]
    inner join dbo.Schedule as [s] on s.ScheduleID = rs.ScheduleID
    inner join dbo.[Catalog] as [c] on c.ItemID = rs.ReportID
    left join [SettingsCTE] as [scteSubject] on scteSubject.SubscriptionID = rs.SubscriptionID
        and scteSubject.SettingName = 'Subject'
    left join [SettingsCTE] as [scteTo] on scteTo.SubscriptionID = rs.SubscriptionID
        and scteTo.SettingName = 'To'
    left join [SettingsCTE] as [scteBCC] on scteBCC.SubscriptionID = rs.SubscriptionID
        and scteBCC.SettingName = 'BCC'
where c.[Name] like '%' + @SearchString + '%';

Когда у вас есть этот job_name, вы можете просто обратиться к нему в вашем скрипте оболочки. Все, что вам нужно сделать, это запустить бит SQL для sp_start_job из вашего скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...