Могу ли я выполнить отчет SSRS из пакетного файла Windows?
Мы используем SQLServer 2008R2 и хотели бы запустить SSRS отчет из пакетного файла Windows. Мы загружаем таблицы хранилища данных с помощью сторонней программы-планировщика, и в конце нашей таблицы данных мы хотим запустить отчет о качестве данных с использованием SSRS. Я могу создать подписку на отчет, чтобы отправить отчет по электронной почте, но как мне сообщить серверу отчетов, что работа выполнена, и пришло время запустить отчет? Приложение планировщика OUr может запускать командные файлы, поэтому, если бы я мог передать это на сервер отчетов через командный файл, это было бы здорово...
2 ответа
Используя утилиту RS.exe с коротким сценарием "rss", который использует метод SetScheduleProperties, вы можете изменить общее расписание типа "Один раз" в ближайшем будущем.
К сожалению, не существует метода API для непосредственного запуска расписания.
Конечно, но это немного неуклюже. Когда вы создаете подписку на отчет, службы 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