我在这里看到了一个关于这个问题的问题,但它已经很老了,所以如果现在有解决方案,我会再问一次。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
您可以使用[锁定提示](http://msdn.microsoft.com/zh-cn/library/ms187373。aspx) - 'select * from tbl(updlock)' – 2012-08-14 09:29:46
在看到最终编辑后,立即使用nowait在资源被锁定时立即返回:'select * from tbl(updlock,nowait)' – 2012-08-14 11:22:14
谢谢我将给出试一试 – CSharpened 2012-08-14 12:03:59