我有一个 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;
有任何想法吗?