sql server数据驱动订阅停止发送
我有一份每小时运行的报告,检查新订单。这是伟大的工作,但是,我想只发送报告,如果有至少一个订单。如果报告为空-我根本不想发送报告 为了扩展这一点,我只想发送报告,如果有新的订单sql server数据驱动订阅停止发送,sql,sql-server,ssrs-2008,sql-server-2008-r2,Sql,Sql Server,Ssrs 2008,Sql Server 2008 R2,我有一份每小时运行的报告,检查新订单。这是伟大的工作,但是,我想只发送报告,如果有至少一个订单。如果报告为空-我根本不想发送报告 为了扩展这一点,我只想发送报告,如果有新的订单 想法?只需在DDS查询中添加一个条件即可检查订单时间。如果在过去一小时内有任何订单,您的查询应返回结果集,否则不返回任何内容 例如,在查询中添加以下逻辑 DECLARE @HoursAgo int SELECT Top 1 @HoursAgo = DateDiff('hh',getdate(), OrderTime)
想法?只需在DDS查询中添加一个条件即可检查订单时间。如果在过去一小时内有任何订单,您的查询应返回结果集,否则不返回任何内容 例如,在查询中添加以下逻辑
DECLARE @HoursAgo int
SELECT Top 1 @HoursAgo = DateDiff('hh',getdate(), OrderTime)
FROM Orders
ORDER BY OrderTime DESC
在查询中添加以下子句
WHERE @HoursAgo > 0
您可能还需要添加额外的检查,以确保订单是从当天开始的。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
declare@rows int
选择@rows=-1
选择@rows=@@rowcount
如果(@行<1)
开始
RAISERROR('没有返回行',11,1);
结束
这是否仍然会发送空报告?您不会将其放入报告数据集中。定义数据驱动订阅时,它会要求您提供一个查询,该查询可用于确定电子邮件收件人、格式等。对于从该查询返回的每一行,都会处理和传递订阅。如果查询未返回任何结果,则不会发送订阅。要澄清。。我指的是数据驱动订阅创建过程中的步骤3。这在数据驱动订阅中不是必需的。您不需要触摸报告定义。而是修改定义订阅参数scorect的查询,这是处理它的另一种方法。