Sql server 避免insert语句的回滚
我有这段SQL代码,它检查一些参数,如果无效将引发错误,我还想在errors表中插入一条错误记录。问题是,如果发生错误,将回滚整个事务(包括错误记录),我希望回滚除错误记录之外的整个事务 我尝试创建一个单独的事务,但没有成功地提交它Sql server 避免insert语句的回滚,sql-server,transactions,rollback,Sql Server,Transactions,Rollback,我有这段SQL代码,它检查一些参数,如果无效将引发错误,我还想在errors表中插入一条错误记录。问题是,如果发生错误,将回滚整个事务(包括错误记录),我希望回滚除错误记录之外的整个事务 我尝试创建一个单独的事务,但没有成功地提交它 IF @Input IS NULL BEGIN insert into [dbo].Errors('Field1') values ('Input is null') RAISERROR ('some message',
IF @Input IS NULL
BEGIN
insert into [dbo].Errors('Field1') values ('Input is null')
RAISERROR ('some message', 16, 1)
RETURN -1
END
有没有办法在单独的事务中单独隔离insert语句
编辑:
此存储过程是从其他过程调用的,需要回滚,甚至需要从外部回滚,因此我可能需要将此insert语句分离到单独的事务中。您需要在单独的事务中执行此操作。如果表在整个事务过程中被锁定,则不会更改锁,但它不会影响回滚或不回滚的内容。如果发生错误,将回滚整个事务。能否在调用存储过程的代码中添加“try-catch”块?如果您“尝试”存储过程,但它抛出了一个错误,那么您应该捕获该错误。在catch块中,可以调用另一个存储过程,将错误记录在必要的表中 听起来您面临的问题是在哪里调用记录错误的存储过程。这可能很棘手,这完全取决于您如何处理事务以及在何处捕获错误。假设代码a调用代码b,b调用第一个存储过程。现在,当存储过程抛出错误时,如果您在代码a中处理该错误,那么在代码b中执行的所有操作都将回滚。如果您试图在代码b中插入错误记录,那么它也将从代码a中回滚