在多个表中插入数据

时间:2009-08-22 08:28:12

标签: sql multiple-tables

我有一个问题是在多个表中插入数据。我已经定义了主键和&表中的引用键现在我想在单个查询中插入两个表中的数据.......我该怎么做........... ???????

4 个答案:

答案 0 :(得分:4)

您的问题并不完全清楚具体问题是什么。我可以看到三种可能性:
1.您希望通过单个INSERT语句插入两个表中 你想做两次插入,但没有其他任何东西能够“进入中间” 3.您想要插入一个表,然后获取要插入第二个表的主键


1.答案很简单:

You can't.


2.答案很简单:

BEGIN TRANSACTION
   INSERT INTO <table1> (a,b,c) VALUES (1,2,3)
   INSERT INTO <table2> (a,b,c) VALUES (1,2,3)
COMMIT TRANSACTION


3.答案有几种可能性。每个都取决于你想要做什么。您很可能希望使用SCOPE_IDENTITY(),但您可能还想查找@@identityIDENT_CURRENT()以了解各种不同的选项和复杂性。

BEGIN TRANSACTION

   INSERT INTO <dimension_table> (name)
      VALUES ('my new item')

   INSERT INTO <fact_table> (item_id, iteam_value)
      VALUES (SCOPE_IDENTITY(), 1)

COMMIT TRANSACTION

答案 1 :(得分:1)

这就是交易的意义所在。标准SQL不允许一次将单个语句插入多个表。正确的方法是:

-- begin transaction
insert into table 1 ...
insert into table 2 ...
commit

答案 2 :(得分:0)

您的语言是否支持INSERT ALL构造?如果是这样,那是最好的方法。事实上,这是唯一的方法。我在another SO thread中发布了这个构造的示例(该示例语法来自Oracle SQL)。

另一个选项是构建一个事务存储过程,该过程将记录插入主键表,然后将记录插入引用表。

答案 3 :(得分:0)

你选择做的就是使用ORM(比如Hibernate,NHibernate)你创建对象并设置其他关系,最后只保存主对象,如:

A a;
B b;
C c;
a.set(b);
a.set(c);
DAO.saveOrUpdate(a);

你必须注意你的DAO.saveOrUpdate(a);代码行只适用于hibernate但它将数据插入到表A,B,C中。