请教下大家在一个存储过程中要怎么写事务和锁(以及使用什么锁)呢?业务流程是:
现在有三张表:用户表usertb,系统帐户表systb,交易记录表recordtb.在交易中想做三件事
1.从usertb中的用户余额里减掉金额money  --  update
2.在systb中的系统余额里加上金额money   --  update
3.在recordtb中记录这次转帐(username,money,之前系统余额,交易后系统余额---最后两项从systb中取)  -- insert对于这三个操作,我的理解是:1和2要放到一个事务中;1,2和3的操作要用到锁。
那把这三步放一个存储过程中的话,要怎么写事务和使用锁呢?以及使用哪种锁呢?请大家帮帮我,解决既送分,谢谢大家~

解决方案 »

  1.   

    --如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。
    set xact_abort onbegin tran--1、--2、--3、commit tran
      

  2.   

    谢谢wangtiecheng(不知不为过,不学就是错!) 
     
      刚试了一下,大概知道用法了
     
    ● 那对于锁的选择与使用,能否再请大家帮我一下
      

  3.   

    这个不需要显式来指定锁的隔离级别 
    对于一个事务 如果没有完成 其对资源所施加的锁不会被释放 
    update、insert语句会对表加默认的锁规则 当然会和select语句对表加的锁不同
    xact_abort的作用在于保证数据的完整性 即事务本身的特点