【发布时间】:2012-07-09 21:28:29
【问题描述】:
一个人打开网站上的页面来执行质量控制任务。 在一页上,质量控制活动在用户点击开始按钮时开始。 在另一个页面上,活动在页面加载时开始。
质量控制的活动可以在此人结束时结束:
- 完成任务,
- 保存为不完整,或
- 只是关闭浏览器窗口。
结束时间可以在结束后 10 秒到 30 分钟之间发生。 开始质量控制任务。
问题: 如果您的表格包含 ActivityID、StartTime 和 EndTime 列, 保存此信息的最佳方法是什么 对于表,当更新现有记录的行为发生在插入记录的存储过程之外时?必须捕获 StartTime,这很简单,但是,无论任务完成多长时间,都必须捕获唯一 Activity 的 End Time,并且必须将 Activity EndTime 从 NULL 更改为“完成”。
需要考虑的一些场景:
人 A 开始一个活动,然后完成它。 10秒后, B 人开始和结束。
A 人开始一个 Activity,然后 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 的值(这里描述的一种方法: Get the ID of last inserted records)。 当网页点击“结束”事件时,然后传递从返回的 ActivityID 第一个 proc,并调用一个为 AcitivityID 添加结束时间的 proc 来自第一个过程。
【问题讨论】:
-
你的两程序策略应该工作得很好,只要你有“用户会话”记住 ActivityID。当会话被放弃时,你的真正问题就出现了——如果故意的“关闭活动”事件从未发生会发生什么?您可能希望定期检查关闭所有超过 30 分钟的开放活动,并可能将其标记为“已放弃”或“自动关闭”。
标签: asp.net sql-server-2008 tsql webforms