我在Access中有两个查询。它们都是适度创建的,但是在过程结束时它们具有相同数量的具有相同数据类型的字段。他们都独立工作,产生预期的结果。
不幸的是,
SELECT *
FROM [qry vaBaseQuery-S2]
UNION ALL SELECT *
FROM [qry BaseQuery];
一个接一个地抛出两个'无效使用null'错误。我之前在没有问题的情况下使用了带有空值的Access 2000查询的联合,所以我有点难过。任何人都可以建议这里可能会发生什么?
可能相关的更多信息:
两个查询都没有任何空白行
UNION SELECT *(没有ALL)会抛出相同的错误,但只会抛出一次?!
编辑:
EDIT2:
答案 0 :(得分:2)
您的源查询中很可能有一些条件(Iif())数据转换(CStr()或类似)。 Access可以不同于联合来优化单独的查询;有时它会以非常奇怪的顺序评估条件部分。
就像下一个过度简化的情况一样:
Select Iif(int_fld is null, '0', CStr(int_fld)) As Something
这可能会抛出“无效使用null”或不依赖于评估顺序。
编辑:忘记写正确的表达式,但不会出现此错误:
Select CStr(Iif(int_fld is null, 0, int_fld)) As Something
答案 1 :(得分:1)
Arvo写道:“有时候[ACE / Jet]会以非常奇怪的顺序评估条件部分” - 我可以保证这一点而不仅仅是在使用UNION时。这是我最近在SO上发布的内容,其中仅向查询添加WHERE子句导致引擎以错误的顺序进行评估,从而导致“无效的过程调用”错误,而我找不到绕过它的方法。
SQL for parsing multi-line data?
我建议你从两个Query对象发布SQL代码。也许有人可以发现引擎可能存在问题的东西。
答案 2 :(得分:0)
正如编辑问题中所提到的:鉴于查询将始终是从表单运行的make表查询,我只是将其保留为两个单独的查询(一个make表和一个append)并按顺序触发这两个查询。 / p>