sql >> データベース >  >> RDS >> Sqlserver

エラー時にスクリプト内のすべてを終了してロールバックする

    エラーが発生すると、トランザクションは自動的にロールバックされ、現在のバッチは中止されます。

    ただし、実行は次のバッチに続きます。したがって、エラーが実行された後のバッチ内のすべてのもの。その後、後でエラーをチェックするときに、既にロールバックされたトランザクションをロールバックしようとします。

    また、現在のバッチだけでなく、スクリプト全体を停止するには、次を使用する必要があります:

    raiserror('Error description here', 20, -1) with log
    

    を参照してください。私の答えはこちら その詳細については。

    したがって、 @error を確認する必要があります 各バッチの後、次のようなことがうまくいくと思います:

    BEGIN TRANSACTION
    GO
    
    ALTER Stuff
    GO
    
    if @@error != 0 raiserror('Script failed', 20, -1) with log
    GO
    
    CREATE New Stuff
    GO
    
    if @@error != 0 raiserror('Script failed', 20, -1) with log
    GO
    
    DROP Old Stuff
    GO
    
    if @@error != 0 raiserror('Script failed', 20, -1) with log
    GO
    
    PRINT 'No Errors ... Committing changes'
    COMMIT TRANSACTION
    


    1. PDOは、テーブルから1次元配列に1つの列をフェッチします

    2. C++アプリケーションへのデータベース通知を取得する方法

    3. 異なるバイトのSQL分割ヘキサストリング

    4. mysqli_queryの''の代わりにアクサングラーブ