我需要定期执行SSIS的SSRS报告。
在这里看到一个解决方案:
但是在没有使用脚本任务的情况下SSIS中还有其他选项吗?我不太了解脚本,担心可能会有一些支持问题。
数据库:SQL Server 2008R2标准版
有什么想法吗?非常感谢...
答案 0 :(得分:1)
SSIS控制SQL Agent中SSRS的运行。
这假定SSIS作业将更新控制记录或将其他可识别记录写入数据库。
1.为报告创建订阅
2.运行此SQL以获取报告的GUID
SELECT c.Name AS ReportName
, rs.ScheduleID AS JOB_NAME
, s.[Description]
, s.LastStatus
, s.LastRunTime
FROM
ReportServer..[Catalog] c
JOIN ReportServer..Subscriptions s ON c.ItemID = s.Report_OID
JOIN ReportServer..ReportSchedule rs ON c.ItemID = rs.ReportID
AND rs.SubscriptionID = s.SubscriptionID<br>
3。创建SQL代理作业。
一个。步骤1.
一个SQL语句,用于在包含标记记录的表中查找数据,其中高级设置为&#34;关于失败结束作业报告成功&#34;
IF NOT exists ( select top 1 * from mytable where mykey = 'x'
and mycondition = 'y') RAISERROR ('No Records Found',16,1)
湾第2步
USE msdb
EXEC sp_start_job @job_name = ‘1X2C91X5-8B86-4CDA-9G1B-112C4F6E450A'<br>
使用GUID查询返回的GUID替换GUID。
有一点需要注意......一旦报告订阅已经执行,那么就SQL Agent而言,即使报告未必完成运行,该步骤也已完成。我曾经在Exec步骤之后完成了一项清理工作,它在报告到达之前有效地删除了我的一些数据!
答案 1 :(得分:0)
您可以为从未计划运行的报告创建订阅。
如果您拥有订阅ID,则可以使用SSIS中的简单SQL任务触发报告订阅。
您可以从Report Server数据库获取订阅ID。它位于Subscriptions表中。 使用此查询可帮助找到订阅:
SELECT Catalog.Path ,Catalog.Name ,SubscriptionID ,Subscriptions.Description
FROM Catalog
INNER JOIN订阅 ON Catalog.ItemID = Subscriptions.Report_OID
在SSIS中,您可以在SQL任务中使用此语句来触发订阅:
EXEC reportserver.dbo.AddEvent @EventType='TimedSubscription',@EventData= [Your Subscription ID]
希望这有帮助。