我有一個小時運行的報告檢查新訂單。它的工作很好,但我只想發送報告,如果至少有一個訂單。如果報告爲空 - 我根本不想發送報告。SQL服務器數據驅動的訂閱停止發送
爲了擴大這一點,我想只發送報告,如果有新的訂單。
想法?
我有一個小時運行的報告檢查新訂單。它的工作很好,但我只想發送報告,如果至少有一個訂單。如果報告爲空 - 我根本不想發送報告。SQL服務器數據驅動的訂閱停止發送
爲了擴大這一點,我想只發送報告,如果有新的訂單。
想法?
只需在您的DDS查詢中添加一個條件來檢查訂單時間。如果在過去一小時內有任何訂單,則您的查詢應返回結果集,否則不會返回任何結果。
例如,在查詢中添加以下邏輯
DECLARE @HoursAgo int
SELECT Top 1 @HoursAgo = DateDiff('hh',getdate(), OrderTime)
FROM Orders
ORDER BY OrderTime DESC
在查詢中加入以下條款
WHERE @HoursAgo > 0
您可能還需要添加額外的檢查,以確保順序是從當天。
有一個稱爲「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
這在數據驅動訂閱中不是必需的。您無需觸摸報告定義。相反,您修改定義您的訂閱參數的查詢 – zzawaideh 2010-11-05 17:46:20
正確,那是處理它的另一種方式。 – 2010-11-05 19:15:55
這會不會仍發送空報告? – IMHO 2010-11-05 15:16:06
您不要將其放置在報告數據集中。當您定義數據驅動訂閱時,它會要求您提供可用於確定電子郵件收件人,格式等的查詢。對於從該查詢返回的每一行,處理和交付訂閱。如果查詢沒有返回結果,則不發送訂閱。 – zzawaideh 2010-11-05 17:44:25
澄清..我指的是數據驅動訂閱創建過程中的第3步。 – zzawaideh 2010-11-05 17:48:09