Sql server 定期事件执行
我有一个ASP.NETMVC2网站。所有业务都在数据库存储过程中(MS SQL SERVER 2008)。Sql server 定期事件执行,sql-server,sql-server-2008,asp.net-mvc-2,Sql Server,Sql Server 2008,Asp.net Mvc 2,我有一个ASP.NETMVC2网站。所有业务都在数据库存储过程中(MS SQL SERVER 2008)。 任务: 一些用户使用web站点创建记录。将适当的行插入表中。此行具有另一个表的外键,其值在过程中设置。然后,我希望应用程序将记录(更改外键字段)重新分配给另一个记录,如果它在1分钟内未被处理。 例如: 1.用户创建记录A(id=1,adminId=1) 2.只有id=1的管理员才能看到此记录,他应在1分钟内处理此记录。 3.若管理员1在1分钟内未处理记录,则应将其重新分配给其他管理员。例如
任务:
一些用户使用web站点创建记录。将适当的行插入表中。此行具有另一个表的外键,其值在过程中设置。然后,我希望应用程序将记录(更改外键字段)重新分配给另一个记录,如果它在1分钟内未被处理。
例如:
1.用户创建记录
A(id=1,adminId=1)
2.只有id=1的管理员才能看到此记录,他应在1分钟内处理此记录。
3.若管理员1在1分钟内未处理记录,则应将其重新分配给其他管理员。例如
A
更新到(adminId=3)
哪种方式更好?平行线?另一个后台应用程序?或者…我认为你不需要一个单独的过程来处理时间 如果您跟踪记录的创建时间,则可以在应用程序逻辑中或作为数据库过程来实现上述操作—每次从数据库中提取数据时都会发生这种情况 所以
- 如果此表上的活动较少,则保存不必要的定期更新(但必须确保没有客户机获取过时数据!-例如,在数据库上运行报告将要求您确保数据已更新)
- 如果此表上的活动较多,则会产生一些开销(如果一分钟内有100个请求,则检查数据是否最新将需要额外的资源)
- 您避免了需要管理的额外工作,也避免了依赖这些工作(不太复杂)
- 您不需要外部工具。所有逻辑都可以内置。
您应该在表中添加带有时间的列,例如LastHandleTime和locked。在您的示例中,当Admin3尝试搜索某个内容时,逻辑应该如下所示:
SELECT * FROM Table Where
(user='Admin3') Or
(DATEDIFF(m,GETDATE(),@LastHandleTime)=1
And dbo.fn_ChangeAdminName('Admin3')
and locked=0)
函数fn\u ChangeAdminName()显示哪些用户可以访问记录,而不是“原始”用户。问题是记录将在管理员之间迭代,直到他们中的任何一个处理它为止。它真的应该隐藏在一个管理员的列表中,并显示在另一个管理员的列表中。@JooLio,请再次阅读,您隐藏记录的要求没有冲突-您可以通过一个简单的过程使先到先得-Dalex为您提供了检索数据的查询的更多细节,但是你可以在服务器上有一个sp,你可以用管理员的名字调用它,sp会检查是否有任何记录需要重新分配,更新它们(如果必要)并将它们返回给请求数据的管理员…哦,你提供了更多的信息,然后我需要。谢谢