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

Posted

技术标签:

【中文标题】sql server 数据驱动订阅停止发送【英文标题】:sql server data-driven subscription stop sending 【发布时间】:2010-11-05 13:42:39 【问题描述】:

我有一份每小时检查新订单的报告。但是效果很好,我只想在至少有一个订单的情况下发送报告。如果报告为空 - 我根本不想发送报告。

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

想法?

【问题讨论】:

【参考方案1】:

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

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

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

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

 WHERE @HoursAgo > 0

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

【讨论】:

这还不发送空报告吗? 你不要把它放在报表数据集中。当您定义数据驱动订阅时,它会要求您提供一个查询,该查询可用于确定电子邮件收件人、格式等。对于从该查询返回的每一行,都会处理和交付订阅。如果查询未返回任何结果,则不会发送订阅。 澄清一下。我指的是数据驱动订阅创建过程中的第 3 步。【参考方案2】:

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

如果您希望订阅不触发报告,那么我知道的唯一方法是在您的存储过程中检查 select 语句的行数,如果行数为零则抛出错误。这不是一个优雅的方法,但它不会发送报告,因为错误发生在 T-SQL 端并且 s-s-rS 将无法呈现报告。

declare @rows int

select @rows = -1

<select statement here>

select @rows = @@rowcount

if ( @rows < 1 )
begin
    RAISERROR ('no rows returned', 11, 1 );
end

【讨论】:

这在数据驱动订阅中不是必需的。您无需触摸报表定义。相反,您修改定义订阅参数的查询 正确,这是另一种处理方式。

以上是关于sql server 数据驱动订阅停止发送的主要内容,如果未能解决你的问题,请参考以下文章

详解:驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server 建立安全连接。

Confluence 6 SQL Server 数据库驱动修改

Apache HTTP Server 在 SQL Server 上调用后停止工作

C#实现ODBC驱动代码连接Sql Server数据库

怎么连接sql server数据库

“未指定驱动程序名称”将 pandas 数据帧写入 SQL Server 表