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

来源:互联网 发布:帝国cms 图片系统数据 编辑:程序博客网 时间:2024/05/01 17:39
http://bbs.csdn.net/topics/300001895

锁定记录,只允许单用户修改的例子
 
create table #锁表(编号 int)
 
--代码:
if exists(select from 编号='你的编号'
  return
 
insert #锁表 values('你的编号')
 
.....你处理的代码
 
delete #锁表 where 编号='你的编号'
--------------------------------------
--为了防止死锁,建议加时间:
 
create table #锁表(编号 int,时间 datetime)
 
--代码:
if exists(select from 编号='你的编号' and datediff(ss,时间,getdate())<5  --如果锁的时候超过5秒,则是处理超时
  return
 
delete from #锁表
insert #锁表 values('你的编号',getdate())
 
.....你处理的代码
 
delete #锁表 where 编号='你的编号'
---------------------------------------
--锁定记录,只允许单用户修改的例子:
 
--创建测试环境
--创建测试表--部门表
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 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
0 0
原创粉丝点击