我有一個插入/更新後/刪除觸發器,其中每個插入/更新/刪除是一個特定的表進行一次插入一條新記錄在AuditTable。如果AuditTable插入失敗,我想第一個記錄被插入反正並記錄在進一步表「AuditErrors」的錯誤。MSSQL防止回滾時觸發失敗
這就是我到目前爲止,我嘗試了很多不同的東西,但如果觸發器插入AuditTable失敗,我無法得到這個工作(我通過在AuditTable插入中錯誤地插入列的名稱來測試它) 。注意:@sql是插入到AuditTable中的。
DECLARE @TranCounter INT
SET @TranCounter = @@TRANCOUNT
IF @TranCounter > 0
SAVE TRANSACTION AuditInsert;
ELSE
BEGIN TRANSACTION;
BEGIN TRY
EXEC (@sql)
IF @TranCounter = 0
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
-- roll back
IF @TranCounter = 0
ROLLBACK TRANSACTION;
ELSE
IF XACT_STATE() <> -1
ROLLBACK TRANSACTION AuditInsert;
-- insert error into database
IF @TranCounter > 0
SAVE TRANSACTION AuditInsert;
ELSE
BEGIN TRANSACTION;
BEGIN TRY
INSERT INTO [dbo].[AuditErrors] ([AuditErrorCode], [AuditErrorMsg]) VALUES (ERROR_NUMBER(), ERROR_MESSAGE())
IF @TranCounter = 0
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
-- roll back
IF @TranCounter = 0
ROLLBACK TRANSACTION;
ELSE
IF XACT_STATE() <> -1
ROLLBACK TRANSACTION AuditInsert;
END CATCH
END CATCH
乾杯隊友,我沒有試過這但是,但我會在某個階段,讓你知道! – Martin 2011-04-12 14:17:29