提问人: 提问时间:9/5/2008 最后编辑:canolucas 更新时间:5/9/2015 访问量:7591
如何在运行进程时锁定某些 SQL 行?
How do I lock certain SQL rows while running a process on them?
问:
我的工作有一个金融应用程序,用 编写,多个用户可以同时处理。VB.NET
SQL
在某些时候,一个用户可能会决定发布他们(可能还有其他人)当前正在处理的一批条目。
显然,我不再希望任何其他用户在启动发布过程后添加、编辑或删除该批次中的条目。
我已经看到,我可以通过在 Post 进程开始时打开 SQL 事务来锁定所有数据,但该过程可能相当漫长,我宁愿在完成该功能可能需要的几分钟内不要打开事务。
有没有办法从 VB.NET 代码中锁定我知道需要操作的记录?
答:
0赞
Jimmy
9/5/2008
#1
加
with (rowlock)
到 SQL 查询
编辑:好吧,我误解了这个问题。您想要的是事务隔离。+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
评论