sql – 行锁 – 手动使用它们
发布时间:2021-03-31 15:20:01 所属栏目: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 (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- HTML表格标记教程(41):表头的宽度和高度属性WIDTH、HEIGHT
- 《豪杰立体影院2003》震撼上市
- 在ASP.NET 2.0中操作数据之七十四:用Managed Code创建存储
- SQL的JOIN类型有哪些?有何不同?
- .Net Core 下使用ZKWeb.System.Drawing实现验证码功能(图形
- 远程桌面服务中的“IP虚拟化”及其作用
- 这个日期比较条件在SQL中是否可以SARG?
- Sql Server的substring(expression, start, length)函数
- sql-server – 跨多个表的SQL Server全文查询 – 为什么这么
- SQL Server里函数的两种用法