存储过程(一表插入一条数据的同时,另一表插入相应的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 @OidINT
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 ')