0

SQL サーバーに次のようなストアド プロシージャがあります。

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

アプリケーションから呼び出され、実行に数秒かかります。実行中にユーザーがキャンセルすると、レコード テーブルに StartTimestamp が表示されますが、エラーも EndTimestamp もありません。ユーザーがこのストアド プロシージャを開始したことを常に知りたいのですが、成功、エラー、またはキャンセルのいずれかによって終了したときも常に記録したいと考えています。

SQL Server でそれを行う方法はありますか?

ありがとう

4

1 に答える 1

1

たぶん、キャンセルロジックを作り直すことができますか? したがって、ビジネス層から SqlCommand.Cancel を呼び出す代わりに、フラグを設定する 2 番目の proc を実行し、実行中に最初の proc でそのフラグをチェックします...

SqlCommand.Cancel の要点は、実際に実行を停止し、SP の実行を停止してロールバックを実行することです。ビジネス層からこれにアプローチする必要があると思います。

GJ

于 2011-02-16T09:55:25.520 に答える