我创建了一个带有如下插入的存储过程:
CREATE PROCEDURE MyProcedure
... my Params ....
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO MyTable
....
Do some more stuff here
END
现在 MyProcedure 被另一个过程调用,有点像这样:
BEGIN TRANSACTION
do some stuff ....
EXECUTE @return_value = MyProcedure
do some more stuff ...
IF(@return_value < 0)
BEGIN
ROLLBACK
END
通过此设置,如果 MyProcedure 中出现错误,则会执行回滚,并且我的插入也会回滚。问题是 INSERT 是一种日志,让我知道哪些数据进入了 MyProcedure。 我不知道将来谁会调用 MyProcedure,因此即使调用者正在执行回滚,也能确保我的 INSERT 确实发生,这会很棒。有什么我可以做的吗?
您有 2 个目标,但有 1 笔交易。他们是矛盾的。 您需要从 Transaction 语句外部调用 MyProcedure。
记录是一个单独的过程。您需要记录过程调用失败或成功。所以分开2个过程。
首先使用工作参数调用日志记录过程,无需显式事务语句。
然后调用实际交易流程。
EXECUTE @return_value = MyProcedure -- first process
BEGIN TRANSACTION -- second process
do some stuff ....
EXECUTE @return_value = MyProcedure
do some more stuff ...
IF(@return_value < 0)
BEGIN
ROLLBACK
END