【发布时间】:2012-03-22 17:27:05
【问题描述】:
我有一个 C# 应用程序,大约有十几个员工同时使用它。它只是从 SQL Server 2005 表中选择顶部记录,删除它,然后在表单上显示数据。
一旦选择了记录,就需要将其删除,因此 2 个人不要抓取并处理同一记录。
相当直截了当......
我不久前发现了一个建议(找不到我从中获得它的网站,抱歉)在同一条语句中执行 SELECT 和 DELETE 并使用此“执行 SqlCommand.ExecuteReader()复合”语句:
SELECT TOP 1 *
FROM Call_Table
WHERE Call_Table.hold_call_till <= GetDate()
ORDER BY Call_Table.attempts ASC, Call_Table.custno ASC;
DELETE
FROM Call_Table
WHERE Call_Table.custno = (SELECT TOP 1 Call_Table.custno
FROM Call_Table
WHERE Call_Table.hold_call_till <= GetDate()
ORDER BY Call_Table.attempts ASC, Call_Table.custno ASC);
到目前为止,它运行得很好,但我觉得我很幸运。我们正在招聘大约 5 名新人,我想完全确定这将继续有效。
我很想听听该领域更多经验丰富的兽医的意见。
我应该坚持“如果它没有损坏,就不要修复它”的方法吗?或者我应该加强我的游戏并使用某种记录锁或存储过程??
任何建议都将被公开接受。如有必要,我可以提供有关表或 C# 应用程序的更多信息。
【问题讨论】:
-
OUTPUT是原子队列的朋友; rusanu.com/2010/03/26/using-tables-as-queues
标签: c# sql sql-server-2005