sql – 行锁 – 手动使用它们
发布时间:2021-03-30 23:35:00 所属栏目:MsSql教程 来源:网络整理
导读:我基本上有一个应用程序,有5个线程,每个都从表中读取.查询是表中的一个简单的SELECT TOP 1 *,但我想强制执行锁定,以便下一个线程将从表中选择下一条记录而不是锁定的记录.当应用程序完成任务后,它将更新锁定的记录并释放锁定并再次重复该过程.这可能吗? 解决
|
我基本上有一个应用程序,有5个线程,每个都从表中读取.查询是表中的一个简单的SELECT TOP 1 *,但我想强制执行锁定,以便下一个线程将从表中选择下一条记录而不是锁定的记录.当应用程序完成任务后,它将更新锁定的记录并释放锁定并再次重复该过程.这可能吗? 解决方法我建议的方法是在记录中有一个字段,表示记录是否正在处理.然后实现“从队列中读取”sproc,执行以下操作,以确保没有2个进程获取相同的记录:BEGIN TRANSACTION
-- Find the next available record that's not already being processed.
-- The combination of UPDLOCK and READPAST hints makes sure 2 processes don't
-- grab the same record,and that processes don't block each other.
SELECT TOP 1 @ID = ID
FROM YourTable WITH (UPDLOCK,READPAST)
WHERE BeingProcessed = 0
-- If we've found a record,set it's status to "being processed"
IF (@ID IS NOT NULL)
UPDATE YourTable SET BeingProcessed = 1 WHERE ID = @ID
COMMIT TRANSACTION
-- Finally return the record we've picked up
IF (@ID IS NOT NULL)
SELECT * FROM YourTable WHERE ID = @ID
有关这些表提示的更多信息,请参阅MSDN (编辑:天瑞地安资讯网_瑞安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 最佳SQL Server Reporting Services设置
- HTML+Sass实现HambergurMenu(汉堡包式菜单)
- 在SQL Server存储过程中按索引而不是名称访问表的列
- sql – 如何清除Oracle中的所有缓存项
- sql – 复杂的字段“string – number – string”
- sql – ROW_NUMBER()不够快有大结果集,有什么好的解决方案吗
- sql-server – 如何通过数据库获取特定实例的CPU使用率?
- sql-server-2012 – 什么时候使用SQL Server Developer Edi
- HTML用户注册页面设置源码
- HTML行内元素与块级元素有哪些及区别详解
站长推荐
热点阅读

