webfrom-横贯四方-07-下订单
将购物车中商品通过存储过程生成订单.
1.1 涉及到的表:
购物车: Cart select Id, UserId, BookId, Count from Cart

商品_书(Book)表: Books select Id, Title, Author, PublisherId, PublishDate, ISBN, WordsCount, UnitPrice, ContentDescription, AurhorDescription, EditorComment, TOC, CategoryId, Clicks from Books
1.2 分析订单表,应该包括主表(订单号,用户名,地址,总金额...)和订单详细表(具体买了什么书,书的编号是多少?买了几本...)
订单表: Orders OrderId, OrderDate, UserId, TotalPrice, PostAddress, state
订单详情表: OrderBook Id, OrderID, BookID, Quantity, UnitPrice
2 存储过程要实现的事情:
2.1 将购物车中的数据生成为订单表,并清空购物车
2.2 参数:订单号,用户ID,地址,总金额(输出参数)
create proc Pro_MakeOrder @OrderID nvarchar(50),--订单号 @UserID int,--用户ID @Address nvarchar(100),--收货地址 @TotalMoney money output -- 总金额 as declare @ErrorCode int --记录存储过程执行中是否出现错误 set @ErrorCode = 0 --计算总金额(本人的购物车中的数量*单价,求和) select @TotalMoney = sum([Count]*UnitPrice) from Cart inner join Books on Cart.BookId = Books.Id where UserId = @UserID; if @TotalMoney is null begin Raiserror('总价格为空!',18,1) return end --开启事务 begin transaction --向订单表(主表中)插入数据 Insert into Orders (OrderId, OrderDate, UserId, TotalPrice, PostAddress, state) values(@OrderID,getdate(),@UserID,@TotalMoney,@Address,0); set @ErrorCode=@ErrorCode+@@error--记录错误 --向订单表(字表)中插入数据 Insert into OrderBook(OrderID, BookID, Quantity, UnitPrice) select @OrderID,BookId,Count,UnitPrice from Cart inner join Books on Cart.BookId = Books.Id where UserId = @UserID; set @ErrorCode=@ErrorCode+@@error--记录错误 --删除购物车中的数据 delete from Cart where UserId = @UserID; set @ErrorCode=@ErrorCode+@@error--记录错误 --判断以上操作是否成功 if @ErrorCode =0 begin commit transaction --提交事务 end else begin rollback transaction --事务回滚 Raiserror('生成订单错误!',18,1) end
3 执行存储过程

执行结果:
3.1

3.2 订单表(主表)

3.3 订单表(详细表)

3.4 购物车清空



浙公网安备 33010602011771号