美文网首页
事务和游标

事务和游标

作者: 任人渐疏_Must | 来源:发表于2021-09-29 11:34 被阅读0次
    create database lession5
    go
    use lession5
    go
    create table bank(
        customerName char(10),--顾客姓名
        currentMoney Money  --当前余额
    
    )
    go
    --添加检查约束 账户余额不能少于1元
    alter table bank add constraint CK_currentMoney check(currentMoney>=1)
    go
    
    --添加数据
    insert into bank values('张三',1000)
    insert into bank values('李四',1)
    
    --转账测试 :张三转账1000元给李四
    --张三账户少1000,李四多1000
    use lession5
    go
    update bank set currentMoney=currentMoney-1000 where customerName='张三'
    update bank set currentMoney=currentMoney+1000 where customerName='李四'
    go
    
    --再次查看转账后的结果
    select * from bank
    go
    
    
    
    
    use lession5
    go
    --添加测试数据
    insert into bank values('三毛',10000)
    insert into bank values('小毛',1)
    
    --开始一个事务
    begin transaction tran_bank  --也可简写begin tran tran_bank
    --定义一个用于记录错误的变量
    declare @tran_error int
    set @tran_error = 0
    --在三毛的账户减去
    update bank set currentMoney=currentMoney-10000 where customerName='三毛'
    set @tran_error = @tran_error + @@error
    --在小毛的账户增加
    update bank set currentMoney=currentMoney+10000 where customerName='小毛'
    set @tran_error = @tran_error + @@error
    
    if @tran_error <> 0
        begin
            --执行出错,回滚事务
            rollback transaction
            print '转账失败,交易已取消'
        end
    else 
        begin
            --没有发现错误,提交事务
            commit transaction
            print '交易成功,已保存新数据'
        end
    go
    
    --定义一个名为stuInfo_cursor的可随意滚动的游标
    declare stuInfo_cursor cursor scroll for select * from StuInfo
    
    --打开该游标
    open stuInfo_cursor
    
    --定义个变量,用于存放游标中读取出来的值
    declare @id int
    declare @name nvarchar(10)
    declare @sex char(2)
    declare @classid int
    
    --读取游标的第一条记录行,并存放在变量中
    fetch first from stuInfo_cursor into @id,@name,@sex,@classid
    
    --循环读取游标中的记录
    print '读取的数据如下:'
    while(@@fetch_status = 0)
    begin
        --用print输出读取的数据
        print '学号:'+convert(nvarchar,@id)
            + '姓名:'+@name 
            + '性别:'+@sex
            +'班级编号:' + convert(nvarchar,@classid)
        --读取下一条记录行
        fetch next from stuInfo_cursor into @id,@name,@sex,@classid
    end
    --读取完成后关闭游标
    close stuInfo_cursor
    --删除游标
    deallocate stuInfo_cursor
    
    

    相关文章

      网友评论

          本文标题:事务和游标

          本文链接:https://www.haomeiwen.com/subject/qfyknltx.html