存储过程之销售同时修改仓库

系统 1933 0


--  建立仓库表
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

存储过程之销售同时修改仓库


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论