使用单个SQL语句INSERT INTO多个表,保留AutoNumber

时间:2013-03-03 22:22:34

标签: sql ms-access

我有两张桌子。

Payments由一个自动编号字段组成 - PaymentID。 `

PaymentsMain包含两个字段 - MainIDPaymentID。它已加入Payments上的PaymentsMain.PaymentID = Payments.PaymentID

如何将单个值插入PaymentsMain.MainID,并将新的相应记录添加到Payments,并将自动编号计算为Payments.PaymentID,并将计算后的自动编号用作值`PaymentsMain.PaymentID'?

我想如果我手动生成PaymentID - 基于MainID添加到PaymentID的初始最大值的某种运行总和,这是可能的,但我是想知道是否可以单独使用Autonumbers来完成。

修改

关系如下:Relationships

修改

如果可以指定Access应插入DEFAULT的{​​{1}}值,那么这也可以。

1 个答案:

答案 0 :(得分:0)

鉴于以下内容:

  • 如果INSERT语句的目标是已保存的查询,则可以从多个表中插入字段。
  • 可以插入自动编号字段。
  • 可以在SQL中模拟自动编号序列。

第一步是创建一个保存的查询,如下所示(在本例中名为target):

SELECT PaymentsMain.MainID, PaymentsMain.PaymentID, Payments.PaymentID
FROM PaymentsMain 
INNER JOIN Payments ON PaymentsMain.PaymentID = Payments.PaymentID;

然后计算数据库中当前的最大自动编号(在本例中为1626)。

最后,INSERT查询:

INSERT INTO target (MainID, PaymentsMain.PaymentID, Payments.PaymentID)
SELECT MainID, NewPaymentID, NewPaymentID
FROM (
    SELECT Main.MainID, Sum(1) + 1626 AS NewPaymentID
    FROM Main 
    LEFT JOIN Main AS m2 ON Main.MainID>=m2.MainID
    GROUP BY Main.MainID
)

(这假设自动编号是连续的,而不是随机的。)