SQL SERVER (MSSQL) 排它锁的实例

需求:

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

要解决的问题:

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

解决方法:

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

关键语法是:

with (tablockx) 

原理:

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

下面是实例:


ALTER PROCEDURE [dbo].[存储过程-获取SN(RobotInput已上传工单等待Center获取并持续刷新显示)]


AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;


    -- Insert statements for procedure here		
	declare @getSN int
	begin tran--声明显式事务
	--=================================
	select top 1 @getSN=sn
	from [识别流水表] with (tablockx)
	where
	[识别进度]='RobotInput已上传工单等待Center获取并持续刷新显示' and
	[识别结果] is null order by sn asc;


	if(@getSN is not null)
	BEGIN
		update [识别流水表] set [识别进度]='Center获取并持续刷新显示' where sn=@getSN
	END
	ELSE
	BEGIN
		set @getSN=-1;
	END
	--=================================
	commit tran--提交显式事务
	select @getSN as [getSN];
END


猜你喜欢

转载自blog.csdn.net/u014265135/article/details/73610678