我们正在使用 SQLServer 2008R2,并希望从 Windows 批处理文件运行 SSRS 报告。我们正在使用第三方调度程序加载数据仓库表,在数据加载结束时,我们希望使用 SSRS 运行数据质量报告。我可以创建报告订阅以通过电子邮件发送报告,但我如何向报告服务器传达作业已完成并且是时候运行报告了?我们的调度程序应用程序可以运行批处理文件,因此如果我可以通过批处理文件将其传递给报告服务器,那就太好了……
答案1
当然可以,但是有点笨重。当您创建报表订阅时,Reporting Services 将在 SQL Server Agent 中创建一个作业。不幸的是,该作业的名称完全没有用处 - 一个随机的 GUID。在报表服务器目录数据库中使用以下查询列出与每个报表计划相关的作业名称(ScheduleID 列)。一旦您确定哪个作业调用了订阅,您就可以在批处理文件中使用 sqlcmd 来运行 SQL Server Agent 作业(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
答案2
使用RS.exe实用程序使用一个简短的“rss”脚本设置计划属性方法您可以将“一次”类型的共享计划更改为不久的将来。
不幸的是,似乎没有直接触发计划的 API 方法。