我有一个数据库表,每行代表一个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
如何避免任务成功但无法完成数据库更新?
答案 0 :(得分:1)
begin tran
if (Task(SpecificTask))
UPDATE TASKS SET Completed = 1 WHERE TaskId=@SpecificTask
commit
请勿对失败的任务使用回滚。它有令人讨厌的性能,我也会因为语义原因而避免使用它。毕竟你的功能确实成功了,所以tran应该有条不紊地进行。