2

各行が単一のタスクを表すデータベース テーブルがあります。この行には [Completed] フィールドも含まれており、タスクが正常に完了した場合は true、それ以外の場合は false になります。

Task が以下の関数で表されていると仮定します。

bool Task(int TaskId);

タスクが成功した場合は true を返し、失敗した場合は false を返します。

タスクの結果に基づいてタスク テーブルの完了フィールドを更新する最良の方法は何ですか?

A は次のアプローチを考えています。

A.

BEGIN TRANSACTION

UPDATE TASKS SET Completed = 1 WHERE TaskId=@SpecificTask

if (Task(SpecificTask))
    COMMIT TRANSACTION
else
    ROLLBACK TRANSACTION

B.

if (Task(SpecificTask))
    UPDATE TASKS SET Completed = 1 WHERE TaskId=@SpecificTask

タスクが成功するのを回避するにはどうすればよいですか? データベースの更新は完了できません。

4

1 に答える 1

1
begin tran
if (Task(SpecificTask))
    UPDATE TASKS SET Completed = 1 WHERE TaskId=@SpecificTask
commit

失敗したタスクにロールバックを使用しないでください。パフォーマンスが悪く、セマンティック上の理由からも避けたいと思います。結局のところ、関数は成功したので、tranは整然とコミットする必要があります。

于 2012-04-07T18:42:18.053 に答える