我有一个DDL触发器来审核服务器上发生的DDL事件的任何更改。
触发器中的代码读取eventdata并将其写入表。
我想在TSQL try-catch中包装该操作,所以如果它因任何原因失败,那么我会将错误记录到SQL日志中,但让操作通过,但它似乎不起作用。 我已经使用if exists来确保我需要写入的表仍然存在,但我想捕获任何不可预见的错误并使触发器尽可能健壮。
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;
有什么想法吗?
答案 0 :(得分:1)
您无法使用触发器http://technet.microsoft.com/en-us/library/ms186244.aspx中的xp logevent 看看备注的原因