本人正开发一商城的后台,现遇到问题向大家求助! 
     1、人有三个表,一个订单表:Order   一个订单详情表:OrderDetail    一个商品信息表:Product
     2、订单表中的字段:    ID,OrderNumber(订单号)......
     3、商品信息表中的字段:ID,ProductName(商品名)......
     4、订单详情表中:      ID,OrderID(订单表ID),ProductID(商品表ID)......
   
   例如:
        订单编号:20080415I    订单人:Voyage    订单时间:2008-04-15  
    
       该订单下的所有商品:         生活用品   热水器   1500 RMB   50 台
         生活用品   电冰箱   2500 RMB    5 台
            ......
                                                 提交    
    当用户点击提交的时候,请问各位存储过程能实现吗? 能帮忙提供解决方案更好,小弟感激不尽!
    谢谢!

解决方案 »

  1.   

    完全能够实现。存储过程或者c#都可以实现。做为单据存盘必须要用到事务控制。
    这个在存储过程或者ADO.net中都可以实现的
      

  2.   

    ALTER PROCEDURE P_OrderInput  --添加入库单
    (
    @orderInputNumber varchar,   --订单编号
    @applyID bigint ,           --请求方的ID号,直接从页面传ID过来
    @targetID bigint ,          --目标方的ID号,直接从页面传ID过来
    @siteID int ,               --站点ID号,    直接从页面传ID过来
    @userID int ,     --操作人员的ID,直接从页面传ID过来

    @orderDetail varchar(5000)  --订单中记录的详细商品信息
    )
    AS 
    set nocount on 

    declare @OrderInputID bigint       --记录插入订单表头时的ID号
    declare @dt Datetime    --记录系统时间
    set @dt = getdate() --添加入库单表头信息
    insert into T_OrderInput([OrderInputNumber],[ApplyID],[TargetID],[SiteID],[UserID],[State],[DateTime]) 
    values (@orderInputNumber,@applyID,@targetID,@siteID,@userID,0,@dt) select @OrderInputID = SCOPE_IDENTITY()


    --处理订单的详细信息 --第一次拆分
    declare @tableOne table 

    [ProductOne] varchar(8000)   --  一条商品详细记录
    )
    insert  @tableOne([ProductOne]) select [SubString] from  F_SplitString ('1/20/1/2/4000$1/10/2/2/3500$1/12/3/2/3500','$') --将第一次拆分的结果放入临时表
    --select [ProductOne] from @tableOne --第二次拆分
       declare   @tableTwo   table
    (
    [A]   varchar(20), --第一次被拆分后的字符串
    [OrderInputID] varchar(20), --插入订单表头时返回的ID
    [ProductID] varchar(20), --产品ID号
    [Number] varchar(20) ,      --产品数量 
    [SiteID] varchar(20) ,     --站点ID号
    [Prict] varchar(20)       --产品总价
    )   
    insert into @tableTwo(A) select  [ProductOne] from @tableOne 

       update   @tableTwo   
       set   
               [OrderInputID]=left(A,charindex('/',A)-1),
       [ProductID]=left(stuff(A,1,charindex('/',A),''),charindex('/',stuff(A,1,charindex('/',A),''))-1),
       [Number]=left(stuff(stuff(A,1,charindex('/',A),''),1,charindex('/',stuff(A,1,charindex('/',A),'')),''),charindex('/',stuff(stuff(A,1,charindex('/',A),''),1,charindex('/',stuff(A,1,charindex('/',A),'')),''))-1),
       [SiteID]=left(stuff(stuff(stuff(A,1,charindex('/',A),''),1,charindex('/',stuff(A,1,charindex('/',A),'')),''),1,charindex('/',stuff(stuff(A,1,charindex('/',A),''),1,charindex('/',stuff(A,1,charindex('/',A),'')),'')),''),charindex('/',stuff(stuff(stuff(A,1,charindex('/',A),''),1,charindex('/',stuff(A,1,charindex('/',A),'')),''),1,charindex('/',stuff(stuff(A,1,charindex('/',A),''),1,charindex('/',stuff(A,1,charindex('/',A),'')),'')),''))-1),   
               [Prict]=reverse(left(reverse(A),charindex('/',reverse(A))-1))     --将临时表中的信息插入到T_OrderInput_Detail(订单详情表)中
    declare @orderInput int --插入订单表头时返回的ID
    declare @number int --产品数量
    declare @product int --产品ID号
    declare @site int  --站点ID号
    declare @price int --产品总价
    declare @cur1 cursor 

    set @cur1 = cursor scroll for select [OrderInputID],[ProductID],[Number],[SiteID],[Prict] from @tableTwo 
    open @cur1
    fetch first from @cur1 into @orderInput,@product,@number,@site,@price
    while @@fetch_status = 0
    begin
    insert into T_OrderInput_Detail([orderInputID],[productID],[number],[siteID],[price])
         values (cast(@orderInput as int),cast(@product as int) , cast(@number as int) , cast(@site as int) ,cast(@price as int))
    fetch next from @cur1 into @orderInput,@product,@number,@site,@price
    end