人は Web サイトのページを開いて、品質管理タスクを実行します。あるページでは、人がスタートボタンを押すと品質管理の活動が始まります。別のページでは、ページが読み込まれるとアクティビティが開始されます。
品質管理の活動は、人が次の場合に終了する可能性があります。
- タスクを完了し、
- 不完全として保存する、または
- ブラウザ ウィンドウを閉じるだけです。
EndTime は、品質管理タスクの開始後 10 秒から 30 分の間で発生する可能性があります。
問題: ActivityID、StartTime、およびEndTime列を 持つテーブルがある場合、既存のレコードを更新する行為がストアド プロシージャの外で行われる場合、この情報をテーブルに保存する最良の方法は何でしょうか?レコードを挿入したのは?StartTime をキャプチャする必要がありますが、これは簡単ですが、タスクが完了してから時間が経っても、一意のアクティビティの終了時間をキャプチャする必要があり、アクティビティの EndTime を NULL から "完了"。
考慮すべきいくつかのシナリオ:
人物 A がアクティビティを開始し、それを完了します。10 秒後、B さんが開始して終了します。
人物 A がアクティビティを開始し、人物 B が 10 秒後に開始し、人物 A が人物 B より 5 秒早く終了します 。 /2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/ ?)
このルートは受け入れられるでしょうか...?ページの読み込み時に Insert を呼び出す proc を記述します。proc の一部として、新しいアクティビティと開始時刻を挿入し、ActivityID の値も返します (ここで説明されているメソッドの 1 つ: 最後に挿入されたレコードの ID を取得する)。Web ページが「終了」イベントに到達すると、最初の proc から返された ActivityID を渡し、最初の proc から取得した AcitivityID の終了時間を追加する proc を呼び出します。