Назад | Перейти на главную страницу

Могу ли я выполнить отчет SSRS из командного файла Windows?

Мы используем 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-метода для прямого запуска расписания.