• SQL存储过程及事务


    存储过程是将个SQL语句封a装到一个方法中,好处一是方便客户端的调用,二是执行速度会更快

    --创建存储过程进行转账
    create proc ups_transfer
    @from char,   --源账户 
    @to char,     --目标账户
    @balance money,    --转账金额
    @resultnum int output  --返回结果1=转账成功,2=转账失败,3=金额不足
    as
    begin
        --判断账户余额是否足够转账
        declare @money money
        select @money=balance from bank where CID=@from
        if @money - @balance >=10
        begin
            --开始转账
            begin transaction  --转账操作放到事务里面
            declare @sum int=0 
            --账户1扣款
            update bank set balance = balance -@balance where cid=@from 
            set @sum=@sum + @@ERROR
            --账户2增款
            update bank set balance= balance + @balance where cid=@to
            set @sum=@sum + @@ERROR
            if @sum<>0
            begin
                set @resultnum=2   --转账失败
                rollback
            end
            else
            begin
                set @resultnum=1   --转账成功
                commit
            end
        end
        else
        begin
            set @resultnum=3 --余额不足
        end
    end
    select * from bank
    declare @r int
    exec ups_transfer  '0001','0002',10, @r
    print @r
    
    declare @re int
    exec ups_transfer @from='0001',@to='0002',@balance=0,@resultnum= @re output
    print @re

     ADO.NET调用存储过程

    SqlParameter[] pms = new SqlParameter[]{
      new SqlParameter("@from",SqlDbType.char){Value=from},
      new SqlParameter("@to",SqlDbType.char){Value=to},
      new SqlParameter("@balance",SqlDbType.Money){Value=money},
      new SqlParameter("@resultnum",SqlDbType.Int){Direction=ParameterDirection.Output}
    };
    SqlHelper.ExecuteNonQuery("ups_transfer",CommandType.StoredProcedure,pms);
    //拿到输出参数
    int result= pms[3];
    switch(result){
      case 1: //转账成功
        break;
      case 2: //转账失败
        break;
      case 3: //余额不足
        break;
    }
  • 相关阅读:
    GO語言基礎教程:數組,切片,map
    GO語言視頻教程下載
    GO語言基礎教程:流程控制
    GO語言基礎教程:數據類型,變量,常量
    GO語言基礎教程:Hello world!
    GO語言基礎教程:序章
    騰訊RTX的API開發,給RTX開個天窗
    RTX的api開發實例
    [轉]redis;mongodb;memcache三者的性能比較
    [轉載]史上最强php生成pdf文件,html转pdf文件方法
  • 原文地址:https://www.cnblogs.com/boentouch/p/12953059.html
Copyright © 2020-2023  润新知