日期:2014-05-19  浏览次数:20405 次

存储过程(一表插入一条数据的同时,另一表插入相应的N条数据)
--   创建订单相关基本信息表  
-----------------------------
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 SELECT @Oid = @@IDENTITY FROM OrderInfo
> >
SELECT @Oid = @@IDENTITY

2 OrderList插入
根据业务逻辑循环插入
------解决方案--------------------
订单明细是怎么存放的(也就是@Did,@Mid,@Mprice你是怎么得到的)就怎么循环。
如果是放在游标里的,就一条一条的取出来,加上@Oid,插入。
如果是临时表什么的,那就更简单 values部分写成
select @Oid, Did,Mid,Mprice from #OrderListXX ...
------解决方案--------------------
先插入主表
取得@@IDENTITY后用该值进行关联表的插入
------解决方案--------------------
你的思路是正確的。

先往OrderInfo中插入數據,然後得到剛插入的Oid,然後再往OrderList中插入數據。

你可以用這個來得到Oid

SELECT @Oid = IDENT_CURRENT( 'OrderInfo ')