根据非事务性任务的结果更新数据库表的最佳方法是什么

时间:2012-04-07 16:57:02

标签: sql transactions

我有一个数据库表,每行代表一个Task。该行还包含一个[已完成]字段,如果任务已成功完成,则该字段应为true;如果任务已成功,则该字段应为false。

让我们假设任务由以下函数表示:

bool Task(int TaskId);

在任务成功时返回true,在失败时返回false。

根据任务结果更新任务表的已完成字段的最佳方法是什么?

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

如何避免任务成功但无法完成数据库更新?

1 个答案:

答案 0 :(得分:1)

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

请勿对失败的任务使用回滚。它有令人讨厌的性能,我也会因为语义原因而避免使用它。毕竟你的功能确实成功了,所以tran应该有条不紊地进行。