0

尽量避免单独查询以检查密钥是否存在,然后相应地插入或更新。从谷歌搜索看来,Access 也不支持 SQL 服务器的 MERGE。

谢谢

4

2 回答 2

2

实际上,Access 确实支持“Upserting”,因为它有时被称为。我在Arvin Meyer 和 Douglas J. Steele 编写的名为Microsoft Access Solutions - Tips, Tricks and Secrets from Microsoft Access MVPs的书中找到了这个解决方案。

这是一个从 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]

自然,我认为您可以使用表别名和 where 条件。而且我不确定是否需要如图所示的括号,但我将它们放在那里,因为书中的示例显示了它们(即使表名和字段名不包含空格或符号)。

这是直接取自书中的另一条注释:

很明显,这仅在您为每个表定义了唯一索引时才有效。通常这将是表的主键,但实际上并不需要它,只要候选键存在于两个表中。(这使您可以使用自动编号作为主键,而不必担心数字不同。)索引是包含单个字段还是复合键索引都没有关系,只要它在两张桌子。

于 2012-10-03T04:27:55.573 回答
1

一个简单的更新查询就可以解决问题。
创建一个简单的Select查询。
然后在查询生成器的设计视图中单击更新
看看网格的变化。
现在输入要用来更新字段的表达式或值。
运行查询

于 2012-10-03T06:18:39.233 回答