2

我有一个数据库表,每行代表一个任务。该行还包含一个字段 [Completed],如果任务已成功完成,则该字段应为 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

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

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 回答