1

SQLServer2008の2つのテーブルからデータを削除する必要があります。

2つのテーブルAとBがあります。それぞれを別々のトランザクションに入れる必要があります。

これは私が使用しているコードです。

BEGIN TRANSACTION;
BEGIN TRY
    DELETE      from A
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;

END CATCH

IF @@TRANCOUNT > 0
    COMMIT TRANSACTION;


BEGIN TRANSACTION;
BEGIN TRY
    DELETE     from B
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
END CATCH

IF @@TRANCOUNT > 0
    COMMIT TRANSACTION;

SQL Serverで複数のトランザクションとエラー処理を実装するためのより良い方法はありますか?

テーブルごとに個別のトランザクションを配置する必要があります。

トランザクションの1つが失敗すると、エラーが発生します。

EXECUTE後のトランザクション数は、BEGINステートメントとCOMMITステートメントの数が一致していないことを示しています。レコードは他のトランザクションから削除されていません

4

3 に答える 3

7

これを試して:

BEGIN TRANSACTION;
BEGIN TRY
    DELETE from A
    COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
END CATCH


BEGIN TRANSACTION;
BEGIN TRY
    DELETE     from B
    COMMIT TRANSACTION;
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION;
END CATCH
于 2012-08-27T06:29:50.377 に答える
0

あなたはこのようにすることができます:

BEGIN TRANSACTION one;
BEGIN TRY
    DELETE      from A
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION one;

END CATCH

IF @@TRANCOUNT > 0
    COMMIT TRANSACTION one;


BEGIN TRANSACTION two;
BEGIN TRY
    DELETE     from B
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION two;
END CATCH

IF @@TRANCOUNT > 0
    COMMIT TRANSACTION two;
于 2012-08-27T06:49:46.997 に答える