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 个表 TBLDestination 和 TBLSource。当找到匹配的 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】:访问确实具有使用UPDATE
和LEFT 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 表执行 SQL Server 表的批量更新