日期:2014-05-18  浏览次数:20994 次

请教主从表同时插入数据的问题
例如插入订单,订单由订单主表和订单从表组成。

通常一条订单主表对多条订单从表,订单主表中ID是自动数据库生成,在订单从表中有一个订单主表的外键。我们插入时先插入订单主表,然后将该根据该主表自动生成的ID写入的哦从表记录的主表的外键字段。

现在的问题是如何取得主表自动生成的ID。如果通过数据库触发器来做就比较容易啦,直接在触发器中取得inserted表中的ID字段就可以啦。但是如果是在程序中取就比较困难啦。当然我们可以通过取得主表ID字段中最大一个值来获得主表ID。

但是这样做的弊病也是明显的,程序和数据库是异步执行的,当我们取得主表ID字段中最大一个值的动作发生时,有可能数据库还没有执行完成前面的插入动作,所以我们取得的主表ID字段中最大一个值并不一定是我们刚刚插入的那个。如果是网络多个用户同时向数据库中插入,那么我们取得的最大一个ID,也不一定会是我们刚刚插入的那一个。

有没有一个比较完美的做法,能让主从表同时插入,并且将主表ID写入到从表外键中。

------解决方案--------------------
up
------解决方案--------------------
每天回帖即可获得10分可用分!
========================

頂。

------解决方案--------------------
我最喜欢这样的贴了。
自己搞定。
另外可以通过存储过程来处理,让存储过程返回id
------解决方案--------------------
INSERT INTO UserInfo (Name) VALUES (@Name);
select SCOPE_IDENTITY();


你去联机丛书看一下,还有几个,看哪一种适合
------解决方案--------------------
搞定就好,另外主键不用自增建,用GUID就没有这个问题
------解决方案--------------------
cmd.ExecuteScalar()返回记录组第一条记录第一列值.