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

How do I lock certain SQL rows while running a process on them?

提问人: 提问时间:9/5/2008 最后编辑:canolucas 更新时间:5/9/2015 访问量:7591

问:

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

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

显然,我不再希望任何其他用户启动发布过程添加编辑删除该批次中的条目。

我已经看到,我可以通过在 Post 进程开始时打开 SQL 事务来锁定所有数据,但该过程可能相当漫长,我宁愿在完成该功能可能需要的几分钟内不要打开事务。

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

SQL 数据库 vb.net 事务 锁定

评论


答:

0赞 Jimmy 9/5/2008 #1

with (rowlock)

到 SQL 查询

SQL Server 性能一文

编辑:好吧,我误解了这个问题。您想要的是事务隔离。+1 至 Joel :)

2赞 minty 9/5/2008 #2

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

下面是一个示例

SELECT address1 , city, country
FROM location
FOR UPDATE;
1赞 Joel Coehoorn 9/6/2008 #3

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

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

具体来说,在其中搜索“行锁”,我想你会发现 READ COMMITTED 或 REPEATABLE READ 是你想要的。READ COMMITTED 是 SQL Server 默认值。如果 READ COMMITTED 对你来说还不够强大,那么请选择 REPEATABLE READ。

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

0赞 SQLMenace 9/10/2008 #4

将其包装在 tran 中使用 holdlock + updlock 在 select 中使用

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


processing here

commit