联合查询抛出'无效使用null'异常

时间:2009-06-08 12:12:37

标签: sql ms-access union

我在Access中有两个查询。它们都是适度创建的,但是在过程结束时它们具有相同数量的具有相同数据类型的字段。他们都独立工作,产生预期的结果。

不幸的是,

SELECT * 
FROM [qry vaBaseQuery-S2]
UNION ALL SELECT *
FROM [qry BaseQuery];

一个接一个地抛出两个'无效使用null'错误。我之前在没有问题的情况下使用了带有空值的Access 2000查询的联合,所以我有点难过。任何人都可以建议这里可能会发生什么?

可能相关的更多信息:

  • 两个查询都没有任何空白行

  • UNION SELECT *(没有ALL)会抛出相同的错误,但只会抛出一次?!

编辑:

  • 使用字段名称代替*无效

EDIT2:

  • 鉴于查询将是一个从表单运行的make表查询,我只是把它作为两个单独的查询(一个make表和一个append)并按顺序触发这两个查询。鉴于下面的答案,这听起来比试图实际解决Access反对的问题要少得多。

3 个答案:

答案 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>