Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql server数据驱动订阅停止发送_Sql_Sql Server_Ssrs 2008_Sql Server 2008 R2 - Fatal编程技术网

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的查询,这是处理它的另一种方法。