Вы можете инициировать подписку на отчет с помощью 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
из вашего скрипта.