zoukankan      html  css  js  c++  java
  • 存储过程和事务

    create database ceshi
    go
    use ceshi
    create table Users
    (
       Id int primary key identity,
       Uname varchar(20)
    )
    insert  Users values('张三'),('李四')
    select * from Users
    --要求该表中只能添加5条数据,如果超过五条则执行回滚
    语法:
    begin transaction/tran(简写事务)
    执行的sql语句以及一些判断
    commit tran    --提交事务成功之后
    rollback tran   --失败之后回滚

    begin tran
     insert  Users values('何公冉')
     insert  Users values('何自宇')
     --保存保存数据的节点
     save tran aa
     insert  Users values('郭冲')
     insert  Users values('兴旺')
     --定义变量,获取表中一共有多少条数据
     declare @count int
     --给变量赋值    可以使用select或者是set
     set @count=(select count(1) from Users)
     --判断
     if @count>5
      begin  --代替c#中的{
       print '添加数量超过表中要求的总数量5条'
       rollback tran   aa  --执行回滚
      end   --代替c#中的}
     else
      begin
       print '添加成功'
       commit tran    --执行回滚
      end
     
    --添加锁定时间
    begin tran
    update Users set Uname = '古巨基' where Id = 19
    --设置锁定时间
    waitfor delay '00:00:09'
    commit tran

    --建第二个事务
    begin tran
    select * from Users
    commit tran
    ---------------------------------------------------------------------------------------------
    alter proc Proc_SaleReturn
    (
       @UId   int,
       @OId   int,
       @SaleCase    nvarchar(max),
       @SImg        nvarchar(max),
       @Count       int out
    )
    as
    begin
      begin try
       begin tran
     
         insert into SaleInfoes values(@OId,@SaleCase,@SImg)
         set @Count=@@rowcount
         update OrdersInfoes set OState=3
         set @Count+=@@rowcount
         update GoodsInfoes set GNum+=(select ONum from OrdersInfoes where OId=@OId and UId=@UId) where GId=(select GId from OrdersInfoes where OId=@OId and UId=@UId)
         set @Count+=@@rowcount 
       commit tran
         end try 
     
         begin catch
            rollback tran
         set @Count=0
     end catch 
     return @Count
    end
    declare @C int
    exec Proc_SaleReturn 1,3,'不想要','/Upload/3.png',@C out
    select @C

    select * from OrdersInfoes as o join GoodsInfoes as g on o.GId=g.GId
    join UsersInfoes as u on o.UId=u.UId where u.UId=1
    ------------------------------------------------------------------------------------------------------
    select * from OrderInfo as o join Shopping as s on o.ShopWid = s.ShopId where Oname = 'GuoQi'
    go
    alter proc My_proc
    (
     @DelReson  nvarchar(100),
     @DelPicture  nvarchar(100),
     @OrderId  int,
     @Rults   int output
    )
    as
    begin
     begin try
      begin tran
      insert into delOrderInfo values(@DelReson,@DelPicture,@OrderId)
      update Shopping set ShoNum+=1 where ShopId = (select ShopId from Shopping as s join OrderInfo as o on s.ShopId = o.ShopWid where o.Oid = @OrderId)
      commit tran
      set @Rults = 1
     end try
     begin catch
      rollback tran
     end catch
    end
    declare @rest int
    exec My_proc 'asdas','asdas',1,@rest
    select @rest
  • 相关阅读:
    转:单链表有环判断及其起始位置定位
    转:C++经典排序算法总结
    转:堆排序
    转载:C++快速排序
    转载:平衡二叉树(AVL Tree)
    设计模式原则
    适配器模式
    单例模式
    工厂模式
    Head First设计模式 装饰者模式
  • 原文地址:https://www.cnblogs.com/gc1229/p/13275630.html
Copyright © 2011-2022 走看看