【问题标题】:Alter Table Auto Increment starting number criteria from another query or field从另一个查询或字段更改表自动增量起始编号条件
【发布时间】:2021-09-03 08:57:32
【问题描述】:

我有一个存储我们所有分销合作伙伴销售额的数据库。每周我都会收到更新的销售数据,并将其加载到我称之为 tblImport 的文件中。然后,我运行了一些查询,将新的销售行解析为 tblUpdate 和 tblNewAccounts。我正在努力实现的是将 NewAccounts 表中的 Bill To ID(BT_ID) 字段自动化。我知道如何从主客户表中找到最高的 BT_ID。我想不通的是如何让 tblNewAccounts 开始对主客户表中最大 BT_ID +1 的 BT_ID 字段进行自动编号。

我找到了 Alter Table,这是我在 SQL 查询中使用的代码,但我需要值 128071 实际上是 1 加上主客户表中的 MAX BT_ID。

ALTER TABLE [tblUpdate2_NewAcct]
ALTER COLUMN [BT_ID] AUTOINCREMENT(128071,1)

这是我尝试过的其他方法,但我不断收到错误。

SELECT Max(tblALX_BillTo.BT_ID) AS MaxOfBT_ID
FROM tblALX_BillTo;
ALTER TABLE [tblUpdate2_NewAcct] ALTER COLUMN [BT_ID] AUTOINCREMENT([MaxOfBT_ID],1);

我也尝试在 VBA 中执行此操作,但也没有成功。我假设这一切都与 AutoIncrement 开始的标准字段有关。

【问题讨论】:

  • Access 无法在一个构造中处理多个 SQL(除非它是对 SQLServer 等后端的直通查询)。可以尝试 DMax() 域聚合函数代替静态引用。我不明白为什么 tblNewAccounts 中的自动编号依赖于另一个表中的键。
  • 是的。当我想为自动编号分配种子值时,它是一个空表。我想先分配它,然后用导入表中的新客户填充表。
  • 另外,另一张表中的键是所有客户的主键。不允许重复。它不是自动编号,因为编号始终来自 NewAccounts 表。我这样做的原因是因为我实际上有 4 个不同的销售数据来源。这是我的主要来源,所以它被使用得最多。因此,由于数据的大小,我想尽可能地自动化。

标签: sql vba ms-access


【解决方案1】:

使用相当简单的 VBA 代码,您可以使用 DMax 获取最大电流 BT_ID 值加 1。然后将该值写入您的 ALTER TABLE 语句并执行它。

Dim strDDL As String
Dim lngNewSeed as Long
lngNewSeed = DMax("BT_ID", "tblALX_BillTo") + 1
strDDL = "ALTER TABLE tblUpdate2_NewAcct" & vbCrLF & _
    "ALTER COLUMN BT_ID AUTOINCREMENT(" & lngNewSeed & ", 1)"
CurrentProject.Connection.Execute strDDL

【讨论】:

    猜你喜欢
    • 2010-11-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多