MS Access UPSERT(更新/插入)SQL [重复]

Posted

技术标签:

【中文标题】MS Access UPSERT(更新/插入)SQL [重复]【英文标题】:MS Access UPSERT (Update/Insert) SQL [duplicate] 【发布时间】:2015-11-16 21:27:10 【问题描述】:

我知道这个问题肯定被问过一百万次,但我还没有在 MS Access 2007 SQL 中找到“非 VBA”解决方案。

我正在使用 2 个表 TBLDestinationTBLSource。当找到匹配的 ID 时,我必须从源表记录更新目标表记录。对于不匹配的 ID(即新 ID),我想插入新记录 (请参考下表)。

-----TBLSource-------
ID (match if ID exists in Destination table)
EmpName
EmpAdd

---TBLDestination-----
ID
EmpName (to be updated/inserted)
EmpAdd (to be updated/inserted)
Salary

【问题讨论】:

【参考方案1】:

访问确实具有使用UPDATELEFT JOIN 的等效项。 See here.

【讨论】:

【参考方案2】:

MS Access 没有与 UPSERT 等效的功能,您可以在单个查询中完成这两项操作。

但是,您可以通过执行 UPDATE 查询来连接到要更新的表,从而获得相同的效果。然后执行 INSERT 查询,在其中 OUTER JOIN 到表并仅返回不存在的那些。

【讨论】:

谢谢兔子。我想确保我不会错过这里的任何东西。不幸的是,这最终是一个两步过程。 是的,如果他们在某个时候添加它会很好。这并不难,您只是想确保连接正确,以便覆盖正确的行并插入正确的行。 我们是否可以写一个UDF来执行这个动作。如果有,有什么想法吗? 您的意思是在 VBA 中?您的问题是专门排除 VBA。但是可以肯定的是,您可以在 VBA 中执行此操作,但听起来您在研究时找到的解决方案都是 VBA 函数。 兔子说得对。虽然我想创建一个动态的 Upsert 函数,它的功能类似于 SQL Server 的 upsert 函数。而不是我从 VBA 或 Macro 运行代码,我应该能够从 SQL 语句运行它。希望这是有道理的:/

以上是关于MS Access UPSERT(更新/插入)SQL [重复]的主要内容,如果未能解决你的问题,请参考以下文章

带有 MS Access 更新和插入问题的 Dapper

如何通过 MS ACCESS 表执行 SQL Server 表的批量更新

用 Python 在 MS Access 数据库中插入或更新行

在 MS Access 中插入、更新或删除的数据不直接可用

Oracle:如何 UPSERT(更新或插入表?)

SQLite 插入 - 重复键更新 (UPSERT)