VBA - 插入两个表,其中第一个表的id是第二个字段

时间:2016-09-14 06:54:38

标签: sql excel vba ms-access ado

我有两个excel表格中包含大量数据,其中包含以下列:

IS_IN_DB(db, 'users.id')

-relationship介于 sheet1.pod sheet2.pod 之间(一对多关系)

我需要一个sql将excel表中的数据插入到具有以下表结构的访问数据库中:

EXCEL DATA

Sheet1 [pod, client, address, ...etc] -one record per [pod]
Sheet2 [pod, pointofmeasure, typepct, ...etc] -one-to-many records per [pod]

table2.pod_id = table1.id

可以在一个sql插件中执行吗?

我想出了这个大量插页......

ACCESS DATABASE

Table1 [id, pod, client, address, ...etc]
Table2 [id, pod_id, pod, pointofmeasure, typepct, ...etc]

现在我怎么得到id来向table2插入数据?

3 个答案:

答案 0 :(得分:0)

假设表1中的pod-column是唯一的,您必须插入,再次选择条件SELECT id FROM table1 WHERE pod = 'myCurrentPod'并且有您的ID。

如果pod不是唯一的,即使具有其他已知值的pod也不是唯一的,也没有机会这样做。 如果具有其他已知值的pod是唯一的,则可以使用更多条件展开上部语句。

在所有情况下,你不能进行质量插入,但是从sheet1插入一行,从sheet2插入链接的行,下一个sheet1-row等等。

如果您可以设计表格,则不应使用自动增量ID,而应使用应用程序集ID。或者,如果pod中的值非常独特,请将其用作pk。

答案 1 :(得分:0)

当您的列被正确命名时(即每个属性在整个架构中唯一且一致地命名)并且外键按预期设置时,可以在一个插入中完成。

这是使用SQL DDL for Access ANSI-92 Query Mode的快速草图(您可以使用Access UI创建相同的对象):

CREATE TABLE TableA
( ID IDENTITY NOT NULL UNIQUE, 
  a_col INTEGER NOT NULL );

CREATE TABLE TableB
( ID INTEGER NOT NULL UNIQUE
     REFERENCES TableA ( ID ),  
  b_col INTEGER NOT NULL );

CREATE VIEW TestAB
( a_ID, a_col, b_ID, b_col ) AS 
SELECT A1.ID, A1.a_col, B1.ID, B1.b_col
  FROM TableA AS A1
       INNER JOIN TableB AS B1 ON A1.ID = B1.ID;

如果您然后通过视图插入,省略ID列(从而允许它自动生成),如下所示:

INSERT INTO TestAB ( a_col, b_col ) VALUES ( 55, 99 );

然后将在每个表中插入一行用于单个SQL命令。

也就是说,在命名属性时看起来不够严格,例如Table1.id将名称更改为pod_id中的Table2id在您的架构中不是唯一的。

答案 2 :(得分:0)

我发现了这个...

INSERT INTO [table1] ([data]) 
OUTPUT [inserted].[id], [external_table].[col2] 
INTO [table2] SELECT [col1] 
FROM [external_table]

并在最后一次SELECT ...在工作表之间进行JOIN以检索所有数据?

它的工作方式是什么?