SQL Server代理中的作業

來源:互聯網
上載者:User

     我做的項目類似於百度知道,當然比百度知道要簡單許多。一個問題分享平台,使用者提出問題後若是在規定期限內不做任何處理(不採納正確答案,也不關閉問題或者乾脆就忘了這碼事兒),那麼到期的時候問題被視為到期問題,使用者也要得到扣分懲罰。由於每個問題的到期時間都不一樣,所以問題到期時扣分這項操作就不可能由人來手動即時完成。

     一種方案就是使用者登陸之後,頁面page_load觸發查詢方法查詢目前使用者是否有到期問題,有的話就扣分。但是使用者如果不登陸,那麼就不會扣分,而實際上問題已經到期了,不太符合要求。那麼就只有每個使用者登陸的時候查詢所有問題是否到期。這樣的話如果網站流量過大,那麼效能將很難保證。

     第二種方案。SQL Server2005有一項功能叫做SQL Server代理作業。其中一項功能是由使用者自己設定一個時間點來觸發某條SQL語句。這剛好符合我的要求。

     首先右鍵點擊“SQL Server代理”,選擇“新增作業”。快顯視窗。左側“選擇頁”選項有六項設定。一般只要設定前三項就可以。“常規”裡設定一些簡單的名稱和說明,隨便填。確定。“步驟”裡可以添加執行步驟以及SQL語句。選擇好資料庫之後點擊確定。進入“計劃”設定--建立,這裡就可以設定你的作業執行的頻率以及執行的時間了。

貼上幾張圖,一看便知。

 

計劃:

貼上裡面SQL代碼:

 

Code
--更新問題表[work_status_id]欄位以及扣除到期問題不處理的使用者積分的事務
BEGIN TRANSACTION
    DECLARE @errornum INT 
    --扣分    
    UPDATE [DBKnow].[dbo].[tbZDUser_base]
    SET [useroffer] = [useroffer]-20
    WHERE userid 
    in
    (SELECT userid from [tbZDQuestion] where 
    DateDiff ("hour",[release_time],getdate())>336
    AND work_status_id<5)
    SET @errornum=@errornum+@@error
    --更新[work_status_id]和[Operation_time]
    UPDATE [DBKnow].[dbo].[tbZDQuestion]
    SET [Operation_time] = getdate()
        ,[work_status_id]=5
    WHERE 
    DateDiff ("hour",[release_time],getdate())>336
    AND [work_status_id]<5
    SET @errornum=@errornum+@@error
    --判斷是否有錯誤
    IF @errornum<>0
    BEGIN 
        PRINT '有錯誤'
        ROLLBACK TRANSACTION
    END
    
    ELSE
    BEGIN
        PRINT '操作成功'
    END
COMMIT TRANSACTION        
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.