3

SQL Server では、 c# のブロックにfinally節に似たものはありますか?try..catch...

つまり、SQL Server トランザクションで etcを使用BEGIN TRAN, END TRAN, COMMIT TRAN, ROLLBACK TRANしており、成功、失敗、またはトランザクションに関係なく起動する必要があるセクションまたは一連のアクションが必要です。

その解決策はありますか?(OOPS 言語の try/catch での finally ブロックに似ています)。

前もって感謝します

4

3 に答える 3

3

「成功しても失敗しても」100%の信頼性で動くものはありません。C# プログラムの "finally" 句について話しているのか、SQL Server の BEGIN TRY...END TRY BEGIN CATCH...END CATCH 構造について話しているのかは関係ありません。

問題は、このようなターミナル ブロックは、考えられるすべての障害モードで実行できないことです。考えられるすべての障害モードには、ソフトウェア、ハードウェア、およびネットワークの障害が含まれている必要があります。クライアントが政府の場合、おそらくミサイル攻撃も含める必要があります。

従来のTheDailyWTFへの必須の参照。

于 2012-10-24T17:26:44.507 に答える
2

実際、BEGIN TRY... END TRY...BEGIN CATCH... END CATCHSQL Server には構造があります。私はそれをかなり頻繁に使用します。

ここに概要があります-エラー情報の選択に関するビットはもちろんオプションです-あなたのケースで意味のあることをしてください。

BEGIN TRY
        -- do something here.

    /*  Following line can be used to force termination for testing purposes.
        No data changes will be committed.
    */
    --RAISERROR('testing', 99, 1);

    PRINT 'Successful completion; committing transaction.';
    COMMIT TRAN;
END TRY
BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;

    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
    RAISERROR(N'Error occurred; rolling back and terminating.',18,1);
END CATCH;
于 2012-10-24T17:05:45.520 に答える
0

その最後のものは毎回エラーを発生させますね。

ロールバック エラーをトラップしたい場合は、それを try..except ブロックにも入れる必要があります。

于 2013-08-12T12:08:50.700 に答える