一个人打开网站上的页面以执行质量控制任务。在一页上,质量控制活动在用户点击开始按钮时开始。在另一个页面上,活动在页面加载时开始。
质量控制活动可以在以下人员结束时结束:
- 完成任务,
- 另存为不完整,或
- 只是关闭浏览器窗口。
EndTime 可以发生在质量控制任务开始后 10 秒到 30 分钟的任何时间。
问题: 如果您有一个包含ActivityID、StartTime和EndTime列的表,那么当更新现有记录的行为发生在存储过程之外时,将这些信息保存到表中的最佳方法是什么插入记录?必须捕获 StartTime,这很简单,但是,无论任务完成多久,都必须捕获唯一 Activity 的 End Time,并且必须将 Activity EndTime 从 NULL 更改为“完成”。
需要考虑的一些场景:
人 A 开始一个活动,然后完成它。10 秒后,B 人开始并结束。
A 人开始一个活动,然后 B 人在 10 秒后开始,A 人比 B 人提前 5 秒完成。(我相信任何类型的范围函数都可以在这里工作...... http://blog.sqlauthority.com /2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/?)
这条路线可以接受吗...?编写一个 proc 以在页面加载时调用 Insert。作为 proc 的一部分,插入新活动和开始时间,并返回 ActivityID 的值(此处描述的一种方法: 获取最后插入记录的 ID)。当网页遇到“结束”事件时,传递从第一个 proc 返回的 ActivityID,并调用一个 proc,为来自第一个 proc 的 AcitivityID 添加结束时间。