SQL Server 2008:SELECT FOR UPDATE等效项

时间:2012-08-14 09:21:32

标签: sql-server-2008 locking

  

可能重复:
  SQL Server 2008: SELECT FOR UPDATE

我在这里看到了一个关于此的问题,但它已经过时了,所以如果现在有解决方案,我会再问一次。

我的问题是这个。我有一个数据库表,我想从中选择,但我想锁定我选择的行。这样做的原因是我可能正在运行另一个进程,它也想要选择相同的行,我想阻止它。

想象一下,我有两个进程在做同样的事情。一个人执行选择并开始执行其数据处理。然后几秒钟后,下一个进程出现并进行选择,但由于行未锁定,因此它也会采用相同的记录并开始处理它们。这当然是一个糟糕的情况。在Oracle中,您可以使用SELECT FOR UPDATE,它将取消对行的锁定以防止它们被第二个进程使用。如何在SQL Server 2008中实现这一目标?

编辑:

我应该补充一点,我只能使用标准的sql语句。我无法访问程序,功能等。必须通过简单的声明来完成。它是一个漫长的故事和设计考虑因素已经从我手中夺走。解决方案必须能够存储在表中,稍后检索,然后通过C#中的ADO对象运行,特别是分配给命令对象。

最终编辑:

如何将锁定应用于此声明?

SELECT  * FROM (SELECT TOP (20) * FROM  [TMA_NOT_TO_ENTITY_QUEUE]  WHERE [TMA_NOT_TO_ENTITY_QUEUE].[STATE_ID] = 2 ORDER BY TMA_NOT_TO_ENTITY_QUEUE.ID) a

0 个答案:

没有答案