锁表,在执行以上代码之前,在事务中将numbers表以排它锁方式锁定,执行完之后,释放锁。

解决方案 »

  1.   

    为什么要防止并发,而不是考虑在并发时如何处理好数据?如果你一定不允许并发,兄弟我建议你不要锁  numbers 和 exam_his 表。否则不光是你这个程序不能并发,而是对这2个表的程序都无法并发了。你建一个小表
    create table dealinglist ( status int) 
    go
    你在执行这个过程前
    update dealinglist  set status = 1 where status = 0
    if @@rowcount = 0 
        return 
     --status= 1 表示这个过程正在执行
    执行后,update dealinglist  set status = 0表示执行完了。这是最完美的方法了
    ---------------------
    http://chinadba.cn 最有实战经验的SQL Server优化网站
      

  2.   

    有位大哥告诉我用
    SET TRANSACTION ISOLATION LEVEL REPEATABLE READ不知行不行
    我这里没有并发环境测试
    郁闷
      

  3.   

    只锁一张中间表,不锁你的2个工作表,还不够好吗?如果你不使用中间表,那建议你使用
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE 
    这样的话,你的事务不结束,其它事务对你事务中所涉及的表 select ,insert都不允许