sql-server - 如何防止特定的 INSERT 语句在事务中回滚

标签 sql-server transactions

我有一个非常大的 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 

最佳答案

关于sql-server - 如何防止特定的 INSERT 语句在事务中回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39018418/

相关文章:

java - setMaxResult 无法在带有 Hibernate 的 MSSQL Server 2014 中工作

ruby-on-rails - 运行 rspec 的不同机器上规范的数组顺序不同

sql - SQL Spatial JOIN最近邻居

database - 在宿主语言中,数据库事务在什么情况下可以保证并发正确性?

mysql - SQL中的范围锁可以共享模式获取吗

sql-server - 使用 VB.NET 连接到 SQL Server 数据库

python - 如何让 Django 连接到使用 AWS Lambda 层的 SQL Server?

java - Kettle在java函数中启动改变系统属性

mysql - 续接交易 : ER_LOCK_WAIT_TIMEOUT

spring - 使用 isolation_serializable 使用 Spring 和 hibernate 进行事务管理