SQL服务器数据驱动的订阅停止发送
我有一个小时运行的报告检查新订单。它的工作很好,但我只想发送报告,如果至少有一个订单。如果报告为空 - 我根本不想发送报告。SQL服务器数据驱动的订阅停止发送
为了扩大这一点,我想只发送报告,如果有新的订单。
想法?
只需在您的DDS查询中添加一个条件来检查订单时间。如果在过去一小时内有任何订单,则您的查询应返回结果集,否则不会返回任何结果。
例如,在查询中添加以下逻辑
DECLARE @HoursAgo int
SELECT Top 1 @HoursAgo = DateDiff('hh',getdate(), OrderTime)
FROM Orders
ORDER BY OrderTime DESC
在查询中加入以下条款
WHERE @HoursAgo > 0
您可能还需要添加额外的检查,以确保顺序是从当天。
有一个称为“noRows”如果数据集没有任何行返回,可以显示自定义消息的RDL数据集的属性。它仍然会发送空的报告,只是一个特殊的消息。
如果你想让订阅不会触发报表,那么我知道这样做的唯一方法就是检查select语句的行数,如果你的存储过程存在并且在行数为零时抛出一个错误。这不是一个很好的方法,但它不会发送报告,因为错误发生在T-SQL端,SSRS将无法呈现报告。
declare @rows int
select @rows = -1
<select statement here>
select @rows = @@rowcount
if (@rows < 1)
begin
RAISERROR ('no rows returned', 11, 1);
end
这在数据驱动订阅中不是必需的。您无需触摸报告定义。相反,您修改定义您的订阅参数的查询 – zzawaideh 2010-11-05 17:46:20
正确,那是处理它的另一种方式。 – 2010-11-05 19:15:55
这会不会仍发送空报告? – IMHO 2010-11-05 15:16:06
您不要将其放置在报告数据集中。当您定义数据驱动订阅时,它会要求您提供可用于确定电子邮件收件人,格式等的查询。对于从该查询返回的每一行,处理和交付订阅。如果查询没有返回结果,则不发送订阅。 – zzawaideh 2010-11-05 17:44:25
澄清..我指的是数据驱动订阅创建过程中的第3步。 – zzawaideh 2010-11-05 17:48:09