T-SQL TRY-CATCH无法在DDL触发器中工作

时间:2013-08-27 23:44:43

标签: sql sql-server tsql triggers ddl

我有一个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; 

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您无法使用触发器http://technet.microsoft.com/en-us/library/ms186244.aspx中的xp logevent 看看备注的原因