我有一个非常大的 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
最佳答案
尝试使用表变量而不是临时表。表变量不参与事务。
http://zarez.net/?p=1977
http://www.sqlservercentral.com/blogs/steve_jones/2010/09/21/table-variables-and-transactions/
关于sql-server - 如何防止特定的 INSERT 语句在事务中回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39018418/