我有一個存儲過程,每晚將由windows任務schedular執行。我只需要知道關於存儲過程執行的以下三件事情:
1.是由任務調度執行的存儲過程?
2.存儲過程是否執行但有錯誤?
3.存儲過程是否成功執行?如何將存儲過程的輸出保存到日誌表中?
我已經創建了一個表格來存放這些信息。該表有兩個字段:日期時間和說明。
在我的存儲過程結束時,我寫了一個插入語句,爲每次運行插入一條記錄到我的表(見下面的代碼)。但我需要定義兩個插入(見上面的項目2和3),3(成功)或2(有錯誤)。編號1是sp未執行時,因此沒有記錄插入表中。我已經使用了下面的語句,但它不起作用,因爲在插入表之前遇到錯誤時,存儲過程停止,所以插入從不發生。
IF @@ROWCOUNT > 0 and @@ERROR = 0
BEGIN
insert into Table1
select GETDATE(), 'Successfully'
END
ELSE
insert into Table1
select GETDATE(), 'With errors'
您是否知道解決此問題的好方法?我可以使用哪些語句來保存該表格的記錄?
我正在使用SQL server 2005.
P.S.這些數據將顯示在報告中:我將編寫一個查詢,該查詢必須返回表中的數據+日期和表中不存在的日期。
當Try塊發生錯誤時,存儲過程不會繼續到catch塊,我是對吧?我在這裏談論插入失敗像重複鍵錯誤等。 – Amedo
你是不對的。如果Try塊中發生錯誤 - 存儲過程將轉到catch塊(除非發生嚴重的系統錯誤)。這正是它存在的原因。 這裏是一個演示 - http://sqlfiddle.com/#!6/6ba46/1 –
我在查詢窗口中測試它,而不是存儲過程。我認爲測試它作爲查詢是問題。你能告訴try catch塊能處理哪種類型的錯誤嗎?系統錯誤下我能理解什麼? – Amedo