【问题标题】:INSERT INTO multiple tables with a single SQL statement, preserving AutoNumber使用单个 SQL 语句插入多个表,保留自动编号
【发布时间】:2013-03-05 07:05:42
【问题描述】:

我有两张桌子。

Payments 包含一个自动编号字段 - PaymentID。 `

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

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

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

编辑

关系如下:

编辑

如果可以指定 Access 应该为 PaymentID 插入 DEFAULT 值,那也可以。

【问题讨论】:

  • 要在单个语句中插入多个表,您需要一个存储过程。
  • 在 ms 访问中,您需要自己在 vba(或类似的)中编写代码。你必须模拟一个“交易”——虽然不完美,但应该非常健壮。
  • @Gabe - Access 是否支持 SP?
  • 请使用任何外键显示您的创建表语句。
  • Payments 似乎是一张不必要的表格。它没有任何作用。

标签: sql ms-access


【解决方案1】:

鉴于以下情况:

  • 如果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
)

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

【讨论】:

    猜你喜欢
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    相关资源
    最近更新 更多