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 数据库驱动修改