我有一个问题是在多个表中插入数据。我已经定义了主键和&表中的引用键现在我想在单个查询中插入两个表中的数据.......我该怎么做........... ???????
答案 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(),但您可能还想查找@@identity和IDENT_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中。