Могу ли я выполнить отчет 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
Другие вопросы по тегам