0

我在 SQL Server 中有一个存储过程,看起来像这样:

insert into Record(StartTimestamp) values (GETDATE())
SET @MyID = SCOPE_IDENTITY()
begin try
  -- do something
  UPDATE Record SET EndTimestamp = GETDATE() WHERE ID = @MyID
end try
begin catch
  UPDATE Record SET EndTimestamp = GETDATE(), Error = ERROR_MESSAGE() WHERE ID = @MyID
end catch

它从应用程序中调用,需要几秒钟才能运行。如果用户在它运行时取消它,我最终会在 Record 表中得到一个 StartTimestamp,但没有错误,也没有 EndTimestamp。我总是想知道用户启动了这个存储过程,但我也想总是记录它何时完成,无论是成功、错误还是被取消。

在 SQL Server 中有没有办法做到这一点?

谢谢

4

1 回答 1

1

也许您可以重新设计取消逻辑?因此,不要从业务层调用 SqlCommand.Cancel ,而是执行一些在某处设置标志的第二个 proc,然后让第一个 proc 在运行时检查该标志......

SqlCommand.Cancel 的全部意义在于它真正停止执行,停止 SP 运行并进行回滚。我认为您必须从业务层处理此问题。

GJ

于 2011-02-16T09:55:25.520 回答