我有一个非常庞大的存储过程(SP),其中包含一个事务。我在SP中运行一个算法,如果该算法失败,则会回滚事务。
即使事务被回滚,我仍然需要记录一些数据,但是当事务被回滚时,日志也会被回滚。这是正常的行为,但是我需要将这些日志插入语句从回滚中排除,以便仍然记录事务。
我有一个临时表称为#MissingAllocationLines
,我将我的日志插入到该表中。然后,如果它回滚,我需要将#MissingAllocationLines
中的所有行插入到名为DLWMS_ALLOCATIONMISSINGLOG
的真实表中。
这可能吗?以下是我的示例代码:
create table #MissingAllocationLines
(ALLOCATIONJOBID BIGINT,
ORDERID BIGINT,
ORDERDETAILID BIGINT,
ITEMID BIGINT,
STOCKQUANTITY BIGINT,
ORDERQUANTITY BIGINT)
BEGIN TRANSACTION
WHILE(.....)
BEGIN
INSERT INTO #MissingAllocationLines (ALLOCATIONJOBID,ORDERID,ORDERDETAILID,ITEMID,STOCKQUANTITY,ORDERQUANTITY)
VALUES (@ALLOCATIONJOBID,@OrderID,@OrderDetailID,@ItemID,ISNULL(@StockFreeQuantity, 0),ISNULL(@RemainingQuantity,0))
...
...
...
END
IF(@DONE=1)
BEGIN
COMMIT TRANSACTION
END
ELSE
BEGIN
ROLLBACK TRANSCATION
INSERT INTO DLWMS_ALLOCATIONMISSINGLOG (ALLOCATIONJOBID,ORDERID,ORDERDETAILID,ITEMID,STOCKQUANTITY,ORDERQUANTITY)
SELECT ALLOCATIONJOBID,ORDERID,ORDERDETAILID,ITEMID,STOCKQUANTITY,ORDERQUANTITY
FROM #MissingAllocationLines
END