Sql 在多个表中插入数据

Sql 在多个表中插入数据,sql,multiple-tables,Sql,Multiple Tables,嗨,我在多个表中插入数据时遇到问题。我已经在表中定义了主键和引用键,现在我想在单个查询中在两个表中插入数据……。我如何才能做到这一点……。???????您的语言支持insert ALL构造吗?如果是的话,这是最好的方法。事实上,这是唯一的办法。我发布了一个这个构造的示例,示例语法来自Oracle SQL 另一个选项是构建一个事务性存储过程,该过程在主键表中插入一条记录,然后在引用表中插入一条记录 您的语言是否支持INSERT ALL构造?如果是的话,这是最好的方法。事实上,这是唯一的办法。我发布

嗨,我在多个表中插入数据时遇到问题。我已经在表中定义了主键和引用键,现在我想在单个查询中在两个表中插入数据……。我如何才能做到这一点……。???????

您的语言支持insert ALL构造吗?如果是的话,这是最好的方法。事实上,这是唯一的办法。我发布了一个这个构造的示例,示例语法来自Oracle SQL


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

您的语言是否支持INSERT ALL构造?如果是的话,这是最好的方法。事实上,这是唯一的办法。我发布了一个这个构造的示例,示例语法来自Oracle SQL


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

这就是事务的目的。标准SQL不允许一条语句同时插入多个表。正确的方法是:

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

这就是交易的目的。标准SQL不允许一条语句同时插入多个表。正确的方法是:

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

您可以选择使用ORM,比如Hibernate,NHibernate,创建对象并设置与它的其他关系,最后只保存主对象,如:

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

你必须注意你的DAO.saveOrUpdatea;这行代码只适用于hibernate,但它会将数据插入3个表A、B、C中。

您可以选择使用类似hibernate的ORM,NHibernate创建对象并设置与它的其他关系,最后只保存主对象,如:

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

你的问题不太清楚具体问题是什么。我可以看到三种可能性: 1.您想用一条insert语句插入到两个表中 2.你想做两次插入,但没有其他任何东西能够“进入中间” 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。is有几种可能性。每个都取决于你想做什么。很可能您想使用,但也可能需要查找并了解各种不同的选项和复杂性

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.您想用一条insert语句插入到两个表中 2.你想做两次插入,但没有其他任何东西能够“进入中间” 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。is有几种可能性。每个都取决于你想做什么。很可能您想使用,但也可能需要查找并了解各种不同的选项和复杂性

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