Мы используем SQLServer 2008R2 и хотели бы запускать SSRS-отчет из командного файла Windows. Мы загружаем таблицы хранилища данных с помощью сторонней программы-планировщика, и в конце нашей загрузки данных мы хотим запустить отчет о качестве данных с помощью SSRS. Я могу создать подписку на отчет, чтобы отправить отчет по электронной почте, но как мне сообщить серверу отчетов, что задание выполнено и пора запускать отчет? Приложение-планировщик OUr может запускать пакетные файлы, поэтому, если бы я мог передать это серверу отчетов через пакетный файл, было бы здорово ...
Конечно, но это немного неуклюже. Когда вы создаете подписку на отчет, службы Reporting Services создают задание в агенте SQL Server. К сожалению, у задания будет совершенно бесполезное имя - случайный GUID. Используйте приведенный ниже запрос в базе данных каталога сервера отчетов, чтобы перечислить имена заданий, которые идут с каждым расписанием отчетов (столбец ScheduleID). После того, как вы выяснили, какое задание вызывает подписку, вы можете использовать sqlcmd в пакетном файле, чтобы либо запустить задание агента SQL Server (msdb..sp_start_job), либо просмотреть этап (ы) в задании и выполнить их напрямую. . Я бы выбрал выполнение задания лично, чтобы все еще сохранялась история выполнения.
SELECT
sub.Description,
CASE
WHEN sub.ExtensionSettings LIKE '%<Name>TO</Name><Field>%' THEN '(Data Driven)'
ELSE SUBSTRING(CAST(sub.ExtensionSettings AS varchar(8000)), 56, ISNULL(NULLIF(CHARINDEX('</ParameterValue>', CAST(sub.ExtensionSettings AS varchar(8000))) - 8 - 55 - 1, -63), 1))
END AS SendTo,
cat.Name,
sch.LastRunTime,
sub.LastStatus,
sch.ScheduleID,
u.UserName AS CreatedBy
FROM Subscriptions sub
INNER JOIN Catalog cat
ON sub.Report_OID = cat.ItemID
INNER JOIN ReportSchedule rs
ON sub.SubscriptionID = rs.SubscriptionID
INNER JOIN Schedule sch
ON rs.ScheduleID = sch.ScheduleID
LEFT OUTER JOIN Users u
ON sch.CreatedById = u.UserID
ORDER BY cat.Name
Используя Утилита RS.exe с коротким сценарием "rss", который использует SetScheduleProperties вы можете изменить общее расписание типа «Once» в ближайшем будущем.
К сожалению, не существует API-метода для прямого запуска расписания.