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
        
View Code

3 执行存储过程

执行结果:

3.1

3.2 订单表(主表)

 

3.3 订单表(详细表)

 

3.4 购物车清空

 

posted @ 2017-10-11 21:39  逍遥小天狼  阅读(88)  评论(0)    收藏  举报