数据驱动订阅SSRS标准版2008

时间:2011-10-24 12:45:24

标签: sql sql-server sql-server-2008 reporting-services ssrs-2008

我是MSSQL和SSRS的新手。

我正在尝试在MSSQL 2008 Standard SSRS中创建一个数据驱动的订阅,它执行以下操作。

将报告结果通过电子邮件发送到报告中的电子邮件地址。 每日运行

例如:

Select full_name, email_address from users where (full_name = 'Mark Price')

这将使用email_address列找出要发送电子邮件的人,这也必须适用于多个电子邮件地址的多个结果。

我正在考虑这样做的方式是订阅运行查询,如果没有找到结果则没有任何反应。 但是,如果找到结果,则报告会更改“订阅”表中的行,以便在下一分钟左右再次运行报告,并在结果中找到正确的电子邮件信息。 这是一个愚蠢的想法吗?

我发现一些博客帖子声称这可行,但我无法理解他们的代码,知道它的作用。

那么,有关如何解决此问题的任何建议,或者您是否可以通过简短的描述在互联网上提出建议?

5 个答案:

答案 0 :(得分:1)

这让我回到原来的工作,在我的SQL Server 2005 Enterprise开发框中使用数据驱动的订阅编写了一个问题的解决方案,然后让我感到沮丧的是我们的客户只有标准。

我当时给this post添加了书签,看起来很有希望,但在我有机会实施之前,我最终找到了工作。

当然,它的目标是2005年,但其中一条评论似乎表明它也适用于2008年。

答案 1 :(得分:1)

我在SQL Server Standard上实现了类似的功能,以避免为Enterprise付费。首先,我建立了一个名为“安排DDR”(数据驱动报告)的报告。该报告包含以下参数:

计划报告:在满足数据测试时要触发的SSRS报告(包括文件夹)的名称。例如。 “/会计/报表1”。

参数集:一个字符串,用于查找要在报告中使用的参数。例如。 “ABC”。

查询是否应运行报告:将返回单个值(零或非零)的SQL查询。零将被解释为“不运行此报告”

电子邮件收件人:将以分号分隔的电子邮件收件人列表(如果已运行)将收到该报告。

请注意,“安排DDR”报告是我们实际运行的报告,它会将输出发送给我;它的作用是运行另一个报告 - 在这种情况下它是“/ Accounting / Report1”,它是需要这些电子邮件地址的报告。所以“安排一个DDR”并不是一个真正的报告,虽然它的安排和运行就像一个 - 它是一个构建和运行报告的小工具。

我在SQL中也有一个表定义如下:

CREATE TABLE [dbo].[ParameterSet](
            [ID] [varchar](50) NULL,
            [ParameterName] [varchar](50) NULL,
            [Value] [varchar](2000) NULL
) ON [PRIMARY]

每个参数集 - 在这种情况下为“ABC” - 在表格中有一组记录。在这种情况下,记录可能是ABC / placecode / AA和ABC / year / 2013,这意味着ABC中有两个参数:placecode和year,它们的值为“AA”和“2013”​​。

SSRS中“安排DDR”报告的数据集是

DDR.dbo.DDR3 @reportName, @parameterSet, @nonZeroQuery, @toEmail;

DDR3是一个存储过程:

CREATE PROCEDURE [dbo].[DDR3] 
   @reportName            nvarchar(200),
   @parameterSet   nvarchar(200),
   @nonZeroQuery   nvarchar(2000),
   @toEmail        nvarchar(2000)
AS
BEGIN
   -- SET NOCOUNT ON added to prevent extra result sets from
   -- interfering with SELECT statements.
   SET NOCOUNT ON;

   select ddr.dbo.RunADDR(@reportName,@parameterSet,@nonZeroQuery,@toEmail) as DDRresult;

   END

RunADDR是一个CLR。这是一个如何运作的概述;如果有人想要,我可以发布一些代码。

  • 设置凭据
  • 选择Para​​meterSet表中参数设置字段与从Schedule A DDR报告传入的参数集名称匹配的所有参数
  • 对于每个参数
    • 设置参数数组以保存检索到的行中定义的参数。 (这是您使用表格动态填充参数的方法。)
  • 结束
  • 如果从Schedule A DDR传入“nonZeroQuery”值
    • 然后运行nonZeroQuery并退出,如果您返回零行。 (如果不满足某些条件,这就是阻止查询执行的方法;任何返回其他零的查询都将允许报告运行)
  • 结束如果
  • 现在请SSRS运行报告,使用我们刚从表中提取的参数,以及从Schedule A DDR传入的报告名称
  • 获取输出并将其写入本地文件
  • 将文件通过电子邮件发送到从Schedule A DDR
  • 传入的任何电子邮件地址

答案 2 :(得分:0)

我没有创建订阅来修改订阅表,而是将其放在其他地方,例如在SQL代理中。但这个想法是一样的。定期运行的SQL可以在订阅表中添加或更改行。

谷歌的“SSRS订阅表”返回了一些有用的结果:Here's an article基于2005年,但2008年的原则应该是相同的:This article是2008年的,并且非常接近你也在描述什么。

我只是在订阅表中逐个查看字段,并确定每个字段需要什么。尝试手动创建一行(手动插入语句)以发送订阅。

答案 3 :(得分:0)

市场上有一些工具支持SSRS数据驱动报告:

这些是桌面工具,但我想你不是要替换SSRS,只是为了扩展它。 您可以将它们与SQLServer标准版一起使用。

答案 4 :(得分:0)

您可以使用SQL-RD(第三方解决方案)来创建和运行数据驱动的计划,而无需升级到SQL企业。它还带有基于事件的调度(触发事件报告,包括数据库更改,文件更改,收到的电子邮件等)。