【发布时间】:2014-01-03 17:44:07
【问题描述】:
怎么可能做出这样的场景:
我有带有 Order 对象的表。 DB中有很多订单。有很少线程的机制可以从 DB 获取下一个订单(但需要锁,相同的订单不会被执行几次)。
如何在 SQL Server 级别使一个线程读取行(顺序),将其从 DB 中删除并将其返回给执行它的 C# 编写机制,当其他线程可以看到该行被锁定时,它会跳过该行并占用下一行?
订单有执行优先级,聚集索引在优先级列上。
这些东西会在存储过程中执行。
【问题讨论】:
-
Locking hints 和 Transaction Levels。这里还有很多关于行锁定的问题。
-
(注意骗子使用
UPDATE,你需要DELETE,但基本相同) -
请注意,您必须非常小心数据库和应用程序之间的操作顺序,否则您可能会丢失项目(从数据库中删除后应用程序崩溃)。
标签: sql sql-server multithreading