私は非常に巨大なSPを持っており、トランザクションがあります。私はSPでアルゴリズムを実行しており、アルゴリズムが成功しなかった場合、トランザクションはロールバックされます。特定のINSERT文がトランザクション内でロールバックされないようにする方法
トランザクションがロールバックされてもデータをロギングする必要がありますが、トランザクションがロールバックされるとログもロールバックされます。これは正常な動作ですが、トランザクションがまだログに記録されるように、ロールバックからそのログ挿入ステートメントを除外する必要があります。
私は#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
Oracleには、これに使用できる「自律型トランザクション」と呼ばれるものがあります。 SQL Serverに類似したものがあるかどうかはわかりません。 – Mat