-- 创建订单相关基本信息表 
-----------------------------------------------------------------
CREATE TABLE OrderInfo
(
Oid INT IDENTITY (1, 1) NOT NULL PRIMARY KEY, --订单编号 
Onume INT NOT NULL, --实坐人数
Uid INT NOT NULL, --员工编号
)
-- 创建订单列表 OrderList  
-- 消费者的详细订单情况
-----------------------------------------------------------------
--DROP TABLE OrderList
--GO
CREATE TABLE OrderList
(
Oid INT NOT NULL, --订单编号
Did INT NOT NULL, --桌编号
Mid INT NOT NULL, --物品编号
Mprice SMALLMONEY NOT NULL, --当时价格

这两个表的设计如上所示
现在向这两个表中插入数据,要求是一个订单上会有多个物品,即向表OrderInfo中插入一个订单(订单编号自动生成),同时OrderList表根据OrderInfo表刚插入的订单编号,向OrderList表中插入多行。显示如下:
插入OrderInfo表:
Oid        Onume       Uid
 11         10         100
这条信息插入的同时,插入OrderList表:
Oid        Did           Mid         Mprice
 11         2           1002          25.5
 11         2           1003           26
 11         2           1004           45
......
请问存储过程该如何写?
我写的是
INSERT INTO OrderInfo( Onume,Uid )  
VALUES( @Onume,@Uid ) DECLARE @Oid INT
DECLARE @Did1   INT
SELECT  @Oid = @@IDENTITY FROM OrderInfo
INSERT INTO OrderList( Oid,Did,Mid,Mprice )
VALUES ( @Oid,@Did,@Mid,@Mprice )
但我觉得不对,非常不对,请高手指点,谢谢了

解决方案 »

  1.   

    1 SELECT  @Oid = @@IDENTITY FROM OrderInfo
    >>
    SELECT  @Oid = @@IDENTITY2 OrderList插入
    根据业务逻辑循环插入
      

  2.   

    插入OrderInfo表:
    Oid        Onume       Uid
     11         10         100
    这条信息插入的同时,插入OrderList表:
    Oid        Did           Mid         Mprice
     11         2           1002          25.5
     11         2           1003           26
     11         2           1004           45我没看出这里面的规律~
      

  3.   

    就是相同的Oid,是1对多的关系
      

  4.   

    订单明细是怎么存放的(也就是@Did,@Mid,@Mprice你是怎么得到的)就怎么循环。
    如果是放在游标里的,就一条一条的取出来,加上@Oid,插入。
    如果是临时表什么的,那就更简单 values部分写成 
    select @Oid, Did,Mid,Mprice from #OrderListXX ...
      

  5.   

    先插入主表
    取得@@IDENTITY后用该值进行关联表的插入
      

  6.   

    你的思路是正確的。先往OrderInfo中插入數據,然後得到剛插入的Oid,然後再往OrderList中插入數據。你可以用這個來得到OidSELECT @Oid = IDENT_CURRENT('OrderInfo')
      

  7.   

    zst126(皮皮)  能否给出上面的详细代码