锁定记录,只允许单用户修改的例子

--锁定记录,只允许单用户修改的例子:

--创建测试环境
--创建测试表--部门表
create table 部门(departmentid int,name varchar(10))

--记录锁定表
create table lock(departmentid int,dt datetime)

go
--因为函数中不可以用getdate,所以用个视图,得到当前时间
create view v_getdate as select dt=getdate()
go
--创建自定义函数,判断记录是否锁定
create function f_chk(@departmentid int)
returns bit
as
begin
declare @re bit,@dt datetime
select @dt=dt from v_getdate
if exists(select 1 from lock where departmentid=@departmentid
 and datediff(ss,dt,@dt)<5)
 set @re=1
else
 set @re=0
return(@re)
end
go

--数据处理测试
if dbo.f_chk(3)=1
 print '记录被锁定'
else
begin
 begin tran
 insert into lock values(3,getdate())
 update 部门 set name='A' where departmentid=3
 delete from lock where departmentid=3
 commit tran
end

--删除测试环境
drop table 部门
drop view v_getdate
drop function f_chk

-----------

--为了防止死锁,建议加时间:

create table #锁表(编号 int,时间 datetime)

--代码:
if exists(select 1 from 编号='你的编号' and datediff(ss,时间,getdate())<5  --如果锁的时候超过5秒,则是处理超时
)
  return

delete from #锁表
insert #锁表 values('你的编号',getdate())

.....你处理的代码

delete #锁表 where 编号='你的编号'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值