2013-12-16 63 views
0

我知道,混亂的標​​題。讓我解釋一下:如何檢查時間是否已經達到SQL的下半個小時?

我有一個工作,有多個步驟。

作業每15分鐘運行一次。

作業中的其中一個步驟是運行檢查(存儲過程),以查看該存儲過程內創建的臨時表中是否有記錄。

如果有記錄,我想發送電子郵件。

電子郵件只能在上午7點到下午4點之間發送,它會每30分鐘重複一次。

現在,我知道如何檢查東西是否存在,它是在正確的時間框架:

IF (EXISTS (SELECT 1 
         FROM @NewItems 
         WHERE DATEPART(HOUR, GETDATE()) BETWEEN 7 AND 16)) 
       BEGIN 
        -- send email 
       END 

所以我的問題是,我該怎麼做上述檢查,它的下一個半小時?

例如,我想在上午7點,上午7點30分,上午8點,上午8點30分等到16點(或下午4點)發送此電子郵件。

我該如何去做這件事?

回答

1

您可以使用審覈表來跟蹤您發送的電子郵件。喜歡的東西:

CREATE TABLE EMAIL_AUDIT_TRAIL 
(
    EMAIL_SEND_TIME AS DATETIME NOT NULL, 
    EMAIL_SUMMARY AS VARCHAR(100) 
) 

這樣做的好處是,你得到一些可追溯性服務器端說,當電子郵件被送往,和他們說什麼,也許一個簡短的摘要(如項目數量或其他)。

每個存儲過程運行時,你可以圓的當前時間來使用類似CAST(FLOOR(CAST(GETDATE() as FLOAT(53))*48)/(48) AS DATETIME)(改編自問題T-SQL: Round to nearest 15 minute interval答案)在過去的30分鐘間隔,然後檢查,看看是否間隔有一個條目審計表。

如果沒有,發送電子郵件(並將相應的條目添加到審計表)。

你甚至可以使用相同的方法來確定間隔是否應該有一個電子郵件發送通過檢查當前時間(四捨五入到最近的30分鐘)是否包含在一個包含所有時間應該有電子郵件發送的日子(在你的情況下,7點到16點間隔30分鐘)。

顯然你必須包括審計表的一些清理,以確保它不會永遠增長。

相關問題