我一直在阅读“数据警报”,这是SSRS和Sharepoint提供的一项功能。我想知道是否有类似的东西可以让我在数据库中的值评估为真时触发SSRS报告的传递 - 我没有Sharepoint并且不打算安装它。
更新
我发现一个解决方法是您可以在SSRS中为报表创建计划,然后使用以下查询,您可以找到相关的SQL代理作业。
SELECT *
FROM
ReportServer.dbo.[Subscriptions] Subscriptions
INNER JOIN ReportServer.dbo.ReportSchedule R ON Subscriptions.SubscriptionID = R.SubscriptionID
INNER JOIN msdb.dbo.sysjobs J ON Convert(nvarchar(128),R.ScheduleID) = J.name
INNER JOIN msdb.dbo.sysjobschedules JS ON J.job_id = JS.job_id
有一点需要注意的是,名称看起来像'80B30DA6-6654-4639-82CD-F021E57D2604',然后您可以右键单击代理作业并禁用它 - 您不希望它在定时运行您在SSRS订阅中创建的计划,因为我们希望它基于数据警报运行。
然后,您可以创建另一个SQL代理作业并将其基于T-SQL语句,设置所需的计划以检查数据库。 (每天一次,每周一次等)
然后制作您的SQL查询以评估您要检查的条件是否评估为true - 将其放在您的IF子句中。 当IF变为true时,调用msdb.dbo.sp_start_job函数并向其发送作业名称。
--Example
DECLARE @MaxID int
SET @MaxID = (SELECT max(idcolumn) FROM DbaTools.dbo.TestTable)
IF @MaxID > 1
EXEC msdb.dbo.sp_start_job N'80B30DA6-6654-4639-82CD-F021E57D2604'
ELSE
-- do nothing