微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

http://bbs.csdn.net/topics/300001895

锁定记录,只允许单用户修改的例子
 
create  table  #锁表(编号  int )
 
--代码
if exists( select  from  编号= '你的编号'
   return
 
insert  #锁表  values ( )
 
.....你处理的代码
 
delete  where  '你的编号'
--------------------------------------
--为了防止死锁,建议加时间:
 
,时间 datetime)
 
--代码
'你的编号'  and  datediff(ss,时间,getdate())<5   --如果锁的时候超过5秒,则是处理超时
return
 
delete  #锁表
 
.....你处理的代码
 
'你的编号'
---------------------------------------
--锁定记录,只允许单用户修改的例子:
 
--创建测试环境
--创建测试表--部门表
部门(departmentid  sql keyword" style="white-space:Nowrap; list-style:none; font-family:Consolas, name  varchar (10))
 
--记录锁定表
lock(departmentid  sql keyword" style="white-space:Nowrap; list-style:none; font-family:Consolas,dt datetime)
 
go
--因为函数中不可以用getdate,所以用个视图,得到当前时间
view  v_getdate  as  dt=getdate()
go
--创建自定义函数,判断记录是否锁定
function  f_chk(@departmentid  )
returns  bit
as
begin
declare  @re  bit sql plain" style="white-space:Nowrap; list-style:none; font-family:Consolas,@dt datetime
@dt=dt  v_getdate
lock  departmentid=@departmentid
     sql color1" style="white-space:Nowrap; list-style:none; font-family:Consolas,dt,@dt)<5)
     set  @re=1
else
@re=0
return (@re)
end
go
 
--数据处理测试
if dbo.f_chk(3)=1
     print  '记录被锁定'
else
begin
begin  tran
insert  into  (3,getdate())
update  部门  set  name = 'A'  departmentid=3
departmentid=3
commit  tran
end
 
--删除测试环境
drop  部门
v_getdate
f_chk

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐