当表上的插入触发器失败时,我试图避免数据丢失。我正在使用以下场景尝试此操作,但我的代码失败了。
当在客户表上发生插入时,我想将相同的数据插入到存档表中。当触发器失败时,我不想回滚整个事务,这会导致客户表上的数据丢失。
即使触发器失败,我也希望将数据插入到Customers表中,并且存储过程应该像往常一样返回Customer_ID。
ALTER TRIGGER [dbo].[Customer_Insert_Trigger_Test]
ON [dbo].[Customers]
AFTER INSERT
AS
BEGIN
BEGIN TRY
begin transaction;
set nocount on;
SAVE TRANSACTION InsertSaveHere;
--Simulating error situation
RAISERROR (N'This is message %s %d.', -- Message text.
11, -- Severity,
1, -- State,
N'number', -- First argument.
5); -- Second argument.
Insert into Archive select * from Inserted;
commit transaction;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION InsertSaveHere;
END CATCH
END
Run Code Online (Sandbox Code Playgroud)
我的问题主要是关于如何避免在客户表上的实际插入以在触发器失败时回滚。如何更改我的代码?