尝试避免单独的查询以检查密钥存在,然后相应地插入或更新。从谷歌搜索看来,Access似乎也不支持SQL服务器的MERGE。
由于
答案 0 :(得分:2)
实际上,Access确实支持“Upserting”,因为它有时被称为。我在Arvin Meyer和Douglas J. Steele撰写的一本名为 Microsoft Access Solutions - 来自Microsoft Access MVP的提示,技巧和秘密的书中找到了这个解决方案。
这是一个查询,它从Contacts1表中获取新数据并将其应用于Contacts2表:
UPDATE Contacts2 LEFT JOIN Contacts1
ON Contacts2.ContactID = Contacts1.ContactID
SET Contacts2.ContactID = [Contacts1].[ContactID],
Contacts2.FirstName = [Contacts1].[FirstName],
Contacts2.LastName = [Contacts1].[LastName],
Contacts2.MobilePhone = [Contacts1].[MobilePhone]
当然,我认为你可以使用表别名和条件。而且我不确定如图所示需要括号,但我把它们放在那里,因为书中的例子显示它们(即使表名和字段名不包含空格或符号)。
以下是本书的另一个注释:
很明显,只有为每个表定义了唯一索引时,这才有效。通常这将是表的主键,但只要候选键存在于两个表中,它实际上并不是必需的。 (这允许您使用自动编号作为主键,而不必担心数字不同。)索引是包含单个字段还是复合键索引无关紧要,只要它在两个表。
答案 1 :(得分:1)
简单的更新查询可以解决问题。
创建一个简单的选择查询。
然后在查询构建器的设计视图中单击更新。
查看网格中的更改。
现在输入要更新字段的表达式或值。
运行查询