2010-11-05 56 views
2

我有一个小时运行的报告检查新订单。它的工作很好,但我只想发送报告,如果至少有一个订单。如果报告为空 - 我根本不想发送报告。SQL服务器数据驱动的订阅停止发送

为了扩大这一点,我想只发送报告,如果有新的订单。

想法?

回答

3

只需在您的DDS查询中添加一个条件来检查订单时间。如果在过去一小时内有任何订单,则您的查询应返回结果集,否则不会返回任何结果。

例如,在查询中添加以下逻辑

DECLARE @HoursAgo int 
SELECT Top 1 @HoursAgo = DateDiff('hh',getdate(), OrderTime) 
FROM Orders 
ORDER BY OrderTime DESC 

在查询中加入以下条款

WHERE @HoursAgo > 0 

您可能还需要添加额外的检查,以确保顺序是从当天。

+0

这会不会仍发送空报告? – IMHO 2010-11-05 15:16:06

+0

您不要将其放置在报告数据集中。当您定义数据驱动订阅时,它会要求您提供可用于确定电子邮件收件人,格式等的查询。对于从该查询返回的每一行,处理和交付订阅。如果查询没有返回结果,则不发送订阅。 – zzawaideh 2010-11-05 17:44:25

+0

澄清..我指的是数据驱动订阅创建过程中的第3步。 – zzawaideh 2010-11-05 17:48:09

-1

有一个称为“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 
+0

这在数据驱动订阅中不是必需的。您无需触摸报告定义。相反,您修改定义您的订阅参数的查询 – zzawaideh 2010-11-05 17:46:20

+0

正确,那是处理它的另一种方式。 – 2010-11-05 19:15:55

相关问题