我有两个表,一个是订单表,一个是订单明细表,表结构如下:
订单表(Oid,Rid,TotalPrice,OStatus,Date,MethodOfDeliver,MethodOfPay),Oid为订单编号,主键,自动增长;Rid为读者id号;TotalPrice为此订单需要付的总金额,OStatus代表订单的状态,有未处理和已处理两种。MethodOfDeliver为送货方式,MethodOfPay为付款方式,都是int型订单明细表(Oid,Bid,Quantity),其中订单明细表的Oid(订单ID)和Bid(书ID)为组合主键,Quantity为购买该书的数量。我是想写一个存储过程,能插入一条记录到定单表的同时,能插入订单明细表。问题是每次订单的订单条目的数量是不同的,我怎么循环把这些订单明细插入到明细表里面呢?这就意味着订单条目里面的书的id和购买数量Quantity只能动态地定义啊,也就是说除非sql支持数组变量,写存储过程的时候把书的id和购买数量Quantity都定义成数组,那问题就好解决一些。
高手们是不是还有别的思路呢,我初学不太懂的,请大家都来帮我想想办法,小弟真是万分感谢啊!!!!

解决方案 »

  1.   

    是否可以將訂單明細組合成一個字符串如
    1001|A001|NUM1#1001|A002|NUM2#
    然後到存儲過程中循環解析此字符串 WHILE V_LENGTH>0 DO 
    SET V_POS = POSSTR(V_TEMP,'#');
    SET V_CURRENT= SUBSTR( V_TEMP, 1, V_POS-1 );
    SET V_TEMP = SUBSTR( V_TEMP, V_POS+1 );
    SET V_LENGTH = LENGTH(V_TEMP); 

    SET V_POS = POSSTR(V_CURRENT,'|');
    SET V_OID= SUBSTR( V_CURRENT, 1, V_POS-1 );
    SET V_CURRENT= SUBSTR( V_CURRENT, V_POS+1 );

                      SET V_POS = POSSTR(V_CURRENT,'|');
    SET V_BID= SUBSTR( V_CURRENT, 1, V_POS-1 );
    SET V_CURRENT= SUBSTR( V_CURRENT, V_POS+1 );
    --最后一个字段,不再截取
    SET V_NUM = V_CURRENT;

    insert into 订单明细表("V_OID","V_BID","V_NUM ");

    END WHILE; 
      

  2.   

    没看懂呢,POSSTR是什么函数啊?还有那些变量名是什么意思啊
      

  3.   

    SQL Server2000,有方法可以实现吗???
      

  4.   

    首先,主表和子表的关联如果用Oid,那么订单表的Oid不适合使用自动编号字段,最好取最大值+1。如果在前台追加数据到后台,在前台循环追加即可。
      

  5.   

    我觉得Oid应该是日期+流水号,但是得到Oid的这个方法我不会写,所以干脆用自动增长了,不知道有什么更好的方法呢?
      

  6.   

    在存储过程种利用事务
    把商品ID保存成 xx1|xx2|xx3 这样的先插入订单表,获得订单ID
    然后插入订单明细表,利用游标来做吧。没有仔细研究过,大概就是这样的思路吧