【问题标题】:How best to track a task start time and end time in a single table row?如何最好地在单个表行中跟踪任务开始时间和结束时间?
【发布时间】:2012-07-09 21:28:29
【问题描述】:

一个人打开网站上的页面来执行质量控制任务。 在一页上,质量控制活动在用户点击开始按钮时开始。 在另一个页面上,活动在页面加载时开始。

质量控制的活动可以在此人结束时结束:

  1. 完成任务,
  2. 保存为不完整,或
  3. 只是关闭浏览器窗口。

结束时间可以在结束后 10 秒到 30 分钟之间发生。 开始质量控制任务。

问题: 如果您的表格包含 ActivityID、StartTime 和 EndTime 列, 保存此信息的最佳方法是什么 对于表,当更新现有记录的行为发生在插入记录的存储过程之外时?必须捕获 StartTime,这很简单,但是,无论任务完成多长时间,都必须捕获唯一 Activity 的 End Time,并且必须将 Activity EndTime 从 NULL 更改为“完成”。

需要考虑的一些场景:

这条路线可以接受吗...?编写一个 proc 以在页面加载时调用 Insert。 作为 proc 的一部分,插入新活动和开始时间,以及 返回 ActivityID 的值(这里描述的一种方法: Get the ID of last inserted records)。 当网页点击“结束”事件时,然后传递从返回的 ActivityID 第一个 proc,并调用一个为 AcitivityID 添加结束时间的 proc 来自第一个过程。

【问题讨论】:

  • 你的两程序策略应该工作得很好,只要你有“用户会话”记住 ActivityID。当会话被放弃时,你的真正问题就出现了——如果故意的“关闭活动”事件从未发生会发生什么?您可能希望定期检查关闭所有超过 30 分钟的开放活动,并可能将其标记为“已放弃”或“自动关闭”。

标签: asp.net sql-server-2008 tsql webforms


【解决方案1】:
  insert into [Table_2] ([valueStart]) values('start');
  select SCOPE_IDENTITY();

  int sqlIden = SQLcommand.execute();

  // perform task

  update [Table_2] set [valueFinish] = 'finish' where [id] = sqlIden.ToString();

【讨论】:

  • 我不清楚方法:答案似乎假设两个更新都有一个 proc?我的问题的一部分,我认为我不能使用单个 proc 来做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
相关资源
最近更新 更多