2010-11-05 57 views
2

我有一個小時運行的報告檢查新訂單。它的工作很好,但我只想發送報告,如果至少有一個訂單。如果報告爲空 - 我根本不想發送報告。SQL服務器數據驅動的訂閱停止發送

爲了擴大這一點,我想只發送報告,如果有新的訂單。

想法?

回答

3

只需在您的DDS查詢中添加一個條件來檢查訂單時間。如果在過去一小時內有任何訂單,則您的查詢應返回結果集,否則不會返回任何結果。

例如,在查詢中添加以下邏輯

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

在查詢中加入以下條款

WHERE @HoursAgo > 0 

您可能還需要添加額外的檢查,以確保順序是從當天。

+0

這會不會仍發送空報告? – IMHO 2010-11-05 15:16:06

+0

您不要將其放置在報告數據集中。當您定義數據驅動訂閱時,它會要求您提供可用於確定電子郵件收件人,格式等的查詢。對於從該查詢返回的每一行,處理和交付訂閱。如果查詢沒有返回結果,則不發送訂閱。 – zzawaideh 2010-11-05 17:44:25

+0

澄清..我指的是數據驅動訂閱創建過程中的第3步。 – zzawaideh 2010-11-05 17:48:09

-1

有一個稱爲「noRows」如果數據集沒有任何行返回,可以顯示自定義消息的RDL數據集的屬性。它仍然會發送空的報告,只是一個特殊的消息。

如果你想讓訂閱不會觸發報表,那麼我知道這樣做的唯一方法就是檢查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 
+0

這在數據驅動訂閱中不是必需的。您無需觸摸報告定義。相反,您修改定義您的訂閱參數的查詢 – zzawaideh 2010-11-05 17:46:20

+0

正確,那是處理它的另一種方式。 – 2010-11-05 19:15:55

相關問題