zoukankan      html  css  js  c++  java
  • 存储过程之销售同时修改仓库


    --  建立仓库表
    IF(EXISTS(SELECT name FROM SYSOBJECTS WHERE NAME='仓库' AND TYPE='U'))
     DROP TABLE 仓库
    GO

    CREATE TABLE 仓库
    (
     玩具号 NVARCHAR(20) PRIMARY KEY,
     库存 INT,
     平均单价 FLOAT(8)
    )
    GO

    -- 向仓库表中添加数据
    INSERT 仓库 VALUES('12-1',100,50)
    INSERT 仓库 VALUES('12-2',80,80)
    INSERT 仓库 VALUES('12-3',60,100)
    GO

    -- 创建销售表
    IF(EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='销售' AND TYPE='U'))
     DROP TABLE 销售
    GO

    CREATE TABLE 销售

     SqlID INT IDENTITY(1,1) PRIMARY KEY,
     玩具号 NVARCHAR(20),
     数量 INT,
     销售单价 FLOAT(8)
    )
    GO

    -- 创建存储过程
    IF(EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='SP_INSERTSALE' AND TYPE='P'))
     DROP PROC SP_INSERTSALE
    GO
    CREATE PROC SP_INSERTSALE
     @toyID nvarchar(20),
     @toyquantity int,
     @toyprice float(8)
    AS
    DECLARE @tempquantity int --临时变量,用于保存库存 
    DECLARE @tempprice float(8) --临时变量,用于保存原始平均单价
    DECLARE @tempSum float(8) --临时变量,用于保存原始总成本
    DECLARE @insError int  --此变量用于保存插入时返回的@@ERROR值
    DECLARE @upError int  --此变量用于保存更新时返回的@@ERROR值
    BEGIN
     IF(EXISTS(SELECT * FROM 仓库 WHERE 玩具号=@toyid))
      BEGIN 
       SELECT @tempprice=平均单价 FROM 仓库 WHERE 玩具号=@Toyid
       SELECT @tempquantity=库存 FROM 仓库 WHERE 玩具号=@Toyid
       IF @tempquantity>=@toyquantity
        BEGIN
         BEGIN TRAN
         INSERT 销售(玩具号,数量,销售单价) VALUES(@toyid,@toyquantity,@toyprice)
         SELECT @InsError=@@ERROR
         SELECT @tempSum=@tempquantity*@tempprice-@toyquantity*@toyprice
         SELECT @tempprice=@tempSum/(@tempquantity-@toyquantity) FROM 销售 WHERE 玩具号=@toyid
         UPDATE 仓库 SET 库存=@tempquantity-@toyquantity,平均单价=@tempprice WHERE 玩具号=@toyid
         SELECT @upError=@@Error
         IF @InsError=0 AND @upError=0
          BEGIN
           COMMIT TRAN
           PRINT '操作成功!'  
          END
         ELSE
          BEGIN
           ROLLBACK TRAN
           PRINT '操作失败!' 
          END 
         
        END
       ELSE
        PRINT '数量不够!'
      END
     ELSE
       PRINT '没有这样的货!'
    END
    GO

    EXEC SP_INSERTSALE '12-3',120,20
    GO
    -- 数量不够

    EXEC SP_INSERTSALE '12-4',20,20
    GO
    -- 没有这样的货

    EXEC SP_INSERTSALE '12-1',20,55
    GO

    -- (所影响的行数为 1 行)
    --
    --
    -- (所影响的行数为 1 行)
    --
    -- 操作成功
    SELECT * FROM 仓库
    GO
    SELECT * FROM 销售
    GO

  • 相关阅读:
    Codeforces Round #605 (Div. 3)E
    Codeforces Round #628 (Div. 2)
    Codeforces Round #627 (Div. 3)
    AC自动机,知识点+hdu模板题
    Tire树,hdu2846,hdu4825
    Educational Codeforces Round 83 (Rated for Div. 2)
    分层最短路
    初入mysql的学习
    赛后总结
    Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) D
  • 原文地址:https://www.cnblogs.com/ctoroad/p/275476.html
Copyright © 2011-2022 走看看