SQL SERVER (MSSQL) 排它锁的实例

来源:互联网 发布:不用网络的手机电视 编辑:程序博客网 时间:2024/05/29 07:36

需求:

根据某个字段的标记,来判断要拿到的记录sn,再更新此条记录的标记,防止被别的记录拿到

要解决的问题:

总有那一个瞬间,2个线程同时拿到同一条记录

解决方法:

使用排它锁,下面为实例,好用请给好评。何谓排它锁请自行百度。

关键语法是:

with (tablockx) 

原理:

从使用with(tablockx)开始就独占了,知道commit tran才释放锁

下面是实例:


ALTER PROCEDURE [dbo].[存储过程-获取SN(RobotInput已上传工单等待Center获取并持续刷新显示)]ASBEGIN-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.SET NOCOUNT ON;    -- Insert statements for procedure heredeclare @getSN intbegin tran--声明显式事务--=================================select top 1 @getSN=snfrom [识别流水表] with (tablockx)where[识别进度]='RobotInput已上传工单等待Center获取并持续刷新显示' and[识别结果] is null order by sn asc;if(@getSN is not null)BEGINupdate [识别流水表] set [识别进度]='Center获取并持续刷新显示' where sn=@getSNENDELSEBEGINset @getSN=-1;END--=================================commit tran--提交显式事务select @getSN as [getSN];END


原创粉丝点击