2

我對MSSQL和SSRS相當陌生。數據驅動的訂閱SSRS標準版2008

我試圖在MSSQL 2008 Standard SSRS中創建一個數據驅動的訂閱,它執行以下操作。

將報告結果通過電子郵件發送到報告中的電子郵件地址。 每天運行

例如:

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

這將使用EMAIL_ADDRESS列弄清楚向誰發送電子郵件,這也必須努力與多個電子郵件地址的多個結果。

我想這樣做的方式進行訂閱來運行查詢,如果沒有找到結果則什麼也不會發生。 但是,如果找到結果,那麼報告將更改「訂閱」表中的行,以便在下一分鐘內再次運行報告,並使用結果中找到的正確電子郵件信息。 這是一個愚蠢的主意嗎?

我發現一對夫婦的博客文章,聲稱這工作,但我無法理解他們的代碼足以知道它做什麼。

因此,在任何建議如何去這個問題,或者如果你已經可以在互聯網上有一個簡短的描述建議的東西在那裏?

+0

不,不是一個愚蠢的想法,但噸他MS部分線路答案將是去SSRS企業開箱即用數據驅動的訂閱。 –

+0

如果有人有興趣,我放棄了,並在PHP中完成它:-) –

回答

1

這把我帶回到我的老本行,我用我們的SQL Server 2005企業發展的箱數據驅動訂閱寫了一個解決一個問題,然後發現我的沮喪,我們的客戶只有標準。

我在當時收藏了this post,看起來非常有希望,但是在我有機會實施它之前,我最終轉移了工作。

當然,這是針對2005年,但一個評論似乎表明它在2008年的作品,以及。

0

而是創建訂閱修改訂閱表,我會把那件其他地方,如在SQL代理。但這個想法是一樣的。定期運行的SQL可以添加或更改訂閱表中的行。

Google的「SSRS訂閱表」返回了一些有用的結果:Here's an article基於2005年,但2008年的原則應該是相同的:This article是2008年的版本,並且非常接近您所描述的內容。

我只會在訂閱表中逐個查看字段並確定每個字段的需要。嘗試手動創建一個行(手動插入語句)以發送訂閱。

0

目前市場上的一些工具,這些工具支持SSRS數據驅動的報告:

這些是桌面工具,但我想你不想取代SSRS,只是爲了擴展它。 您可以將它們與SQLServer標準版一起使用。

0

您可以使用第三方解決方案SQL-RD來創建和運行數據驅動的日程安排,而無需升級到SQL企業版。它還帶有基於事件的時間安排(觸發關於事件的報告,包括數據庫更改,文件更改,收到的電子郵件等)。

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中有兩個參數:地點代碼和年份,並且它們具有值「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。以下是它的工作原理概述。如果有人願意,我可以發佈一些代碼。

  • 設置憑據
  • 選擇在PARAMETERSET表所在的PARAMETERSET場從預約A DDR報告
  • 在通過對於每個這些參數的參數設定名稱匹配的所有參數
    • 設置參數數組以保存檢索行中定義的參數。 (這是你如何使用表來動態填充參數。)
  • 結束了
  • 如果有從附表一DDR通過在「nonZeroQuery」值
    • 然後運行nonZeroQuery並退出,如果你得到了零行回來。 (這是你如何避免查詢執行,如果某些條件沒有滿足;返回這是其他零的任何查詢將允許運行報表)
  • 結束時,如果
  • 現在問SSRS運行報告,使用參數我們剛剛從表中提取,並且報告名稱從附表一DDR
  • 得到的輸出,並將其寫入到本地文件
  • 電子郵件文件到任何電子郵件地址來自附件A DDR
  • 傳入傳遞
相關問題