SQL Server:并发读取不可重复的行

SQL Server:并发读取不可重复的行,sql,sql-server,multithreading,Sql,Sql Server,Multithreading,如何实现这样的场景: 我有一张有序的桌子。DB中有许多订单。有一种机制,它有几个线程可以从DB获得下一个命令(但需要锁,同一个命令不会执行几次) 在SQL Server级别,如何使一个线程读取该行(顺序),从DB中删除该行,并将其返回给C#write机制执行该行,当其他线程看到该行被锁定时,它跳过该行并获取下一行 订单具有执行优先级,聚集索引位于优先级列上 这些内容将在存储过程中执行。我会在表中添加一个名为“locked\u by\u thread”的列,该列带有一个线程号,当没有线程将其锁定时

如何实现这样的场景:

我有一张有序的桌子。DB中有许多订单。有一种机制,它有几个线程可以从DB获得下一个命令(但需要锁,同一个命令不会执行几次)

在SQL Server级别,如何使一个线程读取该行(顺序),从DB中删除该行,并将其返回给C#write机制执行该行,当其他线程看到该行被锁定时,它跳过该行并获取下一行

订单具有执行优先级,聚集索引位于优先级列上


这些内容将在存储过程中执行。

我会在表中添加一个名为“locked\u by\u thread”的列,该列带有一个线程号,当没有线程将其锁定时,该列将为null。您必须更频繁地使用此场景,但我会这么做。

,而且。这里还有很多关于行锁定的问题。(注意dupe使用
UPDATE
,您需要
DELETE
,但本质上是一样的)注意,您必须非常小心DB和应用程序之间的操作顺序,否则您可能会丢失项(从DB中删除后应用程序崩溃).不允许我更改表格结构。我被告知要使用SQL Server锁/隔离级别或类似的方法来创建它,但是谢谢,好主意为什么不简单地将这个新列称为OrderState,并使用一些可能的值:new、Processing、Processed。这是个好主意,但每次我尝试这样的方法时,我还需要知道,当有什么东西阻止它时,谁在阻止它--万一进程死掉了或者什么的,我们需要把它们归零。我想你可以有一个时间戳来说明列的设置时间。