1)从字段比较逻辑中删除字符串引号。
2)您有别名
Table1
在您的查询中作为
sourceDB
,所以使用那个引用。
3)您检查是否存在的表应该是“本地”版本的
表1
(插入的那个)。
INSERT INTO Table1
SELECT field1,
field2,
field3,
field4,
field5
FROM [;DATABASE=C:\extDB.accdb].[Table1] sourceDB
WHERE NOT EXISTS (SELECT *
FROM [Table1] sourceDB1
WHERE (sourceDB.[field1] = sourceDB1.[field1] And
sourceDB.[field2] = sourceDB1.[field2] And
sourceDB.[field3] = sourceDB1.[field3] And
sourceDB.[field4] = sourceDB1.[field4] And
sourceDB.[field5] = sourceDB1.[field5]));
编辑:
处理这些字段可能有的情况
null
价值观,你不能做一个简单的
=
比较开始时间
无效的
不平等
无效的
. 我能想到的在MS Access中解决这个问题的最佳方法是替换
无效的
其他一些不可能使用的值。在执行此操作时,还需要确保选择的替换值与数据类型一致。我假设你所有的字段都是文本。
INSERT INTO Table1
SELECT field1,
field2,
field3,
field4,
field5
FROM [;DATABASE=C:\extDB.accdb].[Table1] sourceDB
WHERE NOT EXISTS (SELECT *
FROM [Table1] sourceDB1
WHERE (nz(sourceDB.[field1],"!@#") = nz(sourceDB1.[field1],"!@#") And
nz(sourceDB.[field2],"!@#") = nz(sourceDB1.[field2],"!@#") And
nz(sourceDB.[field3],"!@#") = nz(sourceDB1.[field3],"!@#") And
nz(sourceDB.[field4],"!@#") = nz(sourceDB1.[field4],"!@#") And
nz(sourceDB.[field5],"!@#") = nz(sourceDB1.[field5],"!@#")));