读取至少与19秒内的数据一致。notification

解决方案 »

  1.   

    锁定记录,只允许单用户修改的例子
    create table #锁表(编号 int)--代码:
    if exists(select 1 from 编号='你的编号') 
      returninsert #锁表 values('你的编号').....你处理的代码delete #锁表 where 编号='你的编号'
    --------------------------------------
    --为了防止死锁,建议加时间:create table #锁表(编号 int,时间 datetime)--代码:
    if exists(select 1 from 编号='你的编号' and datediff(ss,时间,getdate())<5  --如果锁的时候超过5秒,则是处理超时

      returndelete 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 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