1
我有一個DDL觸發器來審計對服務器上發生的任何DDL事件的更改。T-SQL TRY-CATCH不能在DDL觸發器中工作
觸發器中的代碼讀取eventdata並將其寫入表中。
我想在TSQL try-catch中包裝該操作,因此如果因爲任何原因失敗,那麼我會將故障記錄到SQL日誌中,但讓操作通過,但似乎不起作用。 我已經在使用如果存在以確保我需要寫入的表仍然存在,但我想要捕獲任何未知的錯誤並使觸發器儘可能健壯。
DDL觸發器似乎工作不同於正常的T-SQL,似乎並沒有兌現TRY-CATCH塊。
下面的代碼工作正常,如果它是在一個SP中但它不工作,如果它在DDL觸發器中。
BEGIN TRY
-- Simulate an error
RAISERROR ('Just a test!', 14, 1);
END TRY
BEGIN CATCH
DECLARE @errorNumber INT = ERROR_NUMBER()
DECLARE @errorMessage NVARCHAR(2048) = ERROR_MESSAGE() + '('
+ CAST(ERROR_NUMBER() AS NVARCHAR) + ')'
-- Log the error to the SQL server event log
EXEC master..xp_logevent 50005, @errorMessage, WARNING
END CATCH;
任何想法?
http://dba.stackexchange.com/questions/8693/why-try-catch-does-not-suppress-exception -in-trigger – bummi
在我使用'CATCH'的經驗中,如果你不在catch中拋出一個錯誤,它將執行你在catch塊中指定的任何內容,但不會將某個工作標記爲失敗。 –