1

我有一个 DDL 触发器来审核对服务器上发生的 DDL 事件的任何更改。

触发器中的代码读取事件数据并将其写入表中。

我想将该操作包装在 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; 

有任何想法吗?

4

1 回答 1

1

不能使用xp logevent from triggers http://technet.microsoft.com/en-us/library/ms186244.aspx 看备注原因

于 2013-09-13T18:28:07.223 回答