2017-05-30 7 views
0

私はCで300レコードをコミットするために発行されたセーブポイントを持っています。しかし、一度致命的な(0で割る)が来たら、私はレコードを処理し、この致命的なレコードを記録するために1つのテーブルを更新する必要があります。どうすればこの致命的なテーブルだけをコミットし、以前のレコードをロールバックすることができますか。ロールバックと共に中間コミット

+0

なぜすべてのクローズ票ですか?私はこれが公正な質問だと思う。 (ただし、さらに情報が必要な場合もあります) – jarlh

+1

ログは別のトランザクションで行います。あなたは使用するDBMSをリストしていませんが、Oracleでは 'PRAGMA AUTONOMOUS_TRANSACTION'を使用して、プロシージャが常に別のトランザクションを使用するようにすることができます。 –

答えて

0

は、SQL Serverを使用する場合:

使用TRY - CATCH方法:致命的なエラーが発生した場合、それはブロックとロールバックトランザクションをキャッチし、1 table.Ifにそのロールバック・更新致命的なレコードの致命的なエラーの後にトランザクションを発生していないに行きますいつも通りコミット。

CREATE PROCEDURE Procedure_Name 
(
    @Parameter1 Data_type, 
    @Parameter2 Data_type 
) 
AS 
BEGIN TRY 

    --- your SQL statements 
    COMMIT TRAN 

END TRY 
BEGIN CATCH 
    ROLLBACK TRAN 

    --After rollback fatal record SQL statements  
     INSERT (or) UPDATE your fatal record 
END CATCH  
関連する問題