如何在运行进程时锁定某些SQL行?

时间:2008-09-05 15:28:20

标签: sql database vb.net transactions locking

我的工作有一个财务应用程序,用VB.NETSQL编写,几个用户可以同时处理。

在某些时候,一个用户可能决定发布他们(可能还有其他人)当前正在处理的一批条目。

显然,我不再希望任何其他用户在之后添加修改删除条目 后期处理已启动。

我已经看到我可以通过在Post进程启动时打开SQL事务来锁定所有数据,但是这个过程可能相当冗长而且我不希望将事务打开完成这项功能可能需要几分钟。

有没有办法从VB.NET代码中锁定我知道需要操作的记录?

4 个答案:

答案 0 :(得分:2)

如果您使用的是Oracle,则会对要锁定的行选择更新

这是一个例子

SELECT address1 , city, country
FROM location
FOR UPDATE;

答案 1 :(得分:1)

您可能希望为整个事务设置隔离级别,而不是在特定表上使用 with(rowlock)

看这个页面:
http://msdn.microsoft.com/en-us/library/ms173763.aspx

具体来说,在其中搜索'row lock',我想你会发现READ COMMITTED或REPEATABLE READ是你想要的。 READ COMMITTED是SQL Server的默认值。如果READ COMMITTED看起来不够强大,那么请去REPEATABLE READ。

更新:在阅读了您的一篇后续帖子后,您肯定希望重复阅读。这将保持锁定,直到您提交或回滚事务。

答案 2 :(得分:0)

添加

with (rowlock)

到您的SQL查询

SQL Server Performance article

编辑:好的,我误解了这个问题。你想要的是事务隔离。 +1来乔尔:)

答案 3 :(得分:0)

将其包装在tran中,使用select

中的holdlock + updlock

例如

begin tran
select * from
SomeTable (holdlock,updlock)
where ....


processing here

commit