sql server数据驱动的订阅停止发送

时间:2010-11-05 13:42:39

标签: sql sql-server ssrs-2008 sql-server-2008-r2

我每小时都有一份报告,检查新订单。它工作得很好,但我想只发送至少一个订单的报告。如果报告为空 - 我根本不想发送报告。

为了扩展这一点,我想只在有新订单的情况下发送报告。

想法?

2 个答案:

答案 0 :(得分:3)

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

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

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

在您的查询中添加以下子句

 WHERE @HoursAgo > 0

您可能还需要添加额外的检查以确保订单来自当天。

答案 1 :(得分:-1)

如果数据集没有返回任何行,则RDL数据集的属性名为“noRows”,可以显示自定义消息。它仍然会发送空报告,只是发送一条特殊信息。

如果您希望订阅不会触发报告,那么我知道这样做的唯一方法是检查存储过程中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