如何直接扫描SQL索引表

时间:2010-11-08 16:13:24

标签: c# sql visual-studio linq ado.net

我有一个SQL表,其索引包含调用的引导。大约30个用户将呼叫这些线索。为了确保没有两个用户呼叫相同的线索,系统必须是即时的。

所以我想这样:

  • 将表格设置为右侧索引
  • 按照索引
  • 扫描表格,我可以打电话(有条件)
  • 当我有电话时,表明该记录是“正在使用”

以下是我的问题: - 我找不到用c#代码将表设置为索引的方法 - Linq需要dataContext(不是即时)而ADO需要DataSet

我没有找到任何资源来帮助我。如果你有,那就非常欢迎。

对不起,如果我听起来很无知,我是SQL数据库的新手。

非常感谢您提前! 马修

2 个答案:

答案 0 :(得分:1)

我看不出你对“即时”的要求与索引的使用有什么关系。按索引访问表也不是即时的。

为了解决您的问题,我建议在调用潜在客户时锁定整个表。这将限制性能,但它也将确保两个用户永远不会调用相同的潜在客户。

示例代码:

Begin Transaction
Lock Table
Search for Lead
Update Lead to indicate that it is in use
Commit Transaction (removes the lock)

使用SELECT * FROM table WITH (HOLDLOCK, TABLOCKX) WHERE 1=0可以在SQL Server中锁定表直到事务结束。

免责声明:是的,我知道可以使用更少锁定的清洁解决方案。上述解决方案的优点是它很简单(不用担心正确的事务隔离级别等)并且它通常具有足够的性能(如果你记得保持“锁定部分”很短并且没有太多的并发访问)

答案 1 :(得分:1)

之前我曾在类似的系统上工作过。我们采取的策略是制定一个分发例程,处理将线索传递给呼叫中心的人员。通常情况下,我们有一个时间限制,指示在任何一个用户队列中,只要将其拖出并送给其他人,就可以在多长时间内获得潜在客户。

这使我们能够做一些非常复杂的事情,例如根据有关领导者的详细信息以及个人呼叫中心人员的工作效率给出偏好。

我们有大量的潜在客户,我们的分销程序设定为每分钟运行一次。设置SLA,以便在我们了解它们的2分钟内联系到铅。

为了支持这一点,您的潜在客户表应该有一个AssignedUserId,可能还有分配时间的日期/时间戳。编写一个proc或一些c#代码,用于从该表中获取未分配的所有记录。执行赋值例程,将更改保存回表中。这个例程应该考虑到他们当前工作的线索数量和每人可接受的开放线索数量,以便在循环分配中给予优先权。

当用户刷新时,他们将拥有他们的潜在客户。您可以在UI中控制刷新率。