【问题标题】:Why am I getting an "Invalid use of Nulls" error in my query?为什么我的查询中出现“无效使用 Nulls”错误?
【发布时间】:2018-10-29 02:33:48
【问题描述】:

我使用 Excel 中的用户表单在我的电子表格之间运行一些内部查询。 但是我收到Invalid Use of Null。我知道nz null 语法(SQL MS Access - Invalid Use of Null),但是我的查询可能非常大,我想知道是否可以在我的 VBA 代码中添加任何内容以允许空值。

【问题讨论】:

  • ISNull() 函数呢?
  • 我们需要查看正在对数据库执行的 SQL。我猜你传入的参数之一没有正确处理 null ,所以当你需要它时会出现 where SomeField = NULL 之类的东西 where somefield = nz(Parm,'') 但是因为它没有足够的信息来真正提供帮助。
  • 我看到两个选项;在最外层的每个选定值中选择将字段名称包装在 NZ(fieldName,'') 中以确保在那里处理所有空值:2) 将每个选定值包装在 NZ(FieldName,'') 的内部查询中以确保空值在那里处理。每当您通过字符串比较(例如 IN、= 、你很好;这是您不确保不为空的值之一;这需要一些时间才能弄清楚
  • 可能先在此处添加 NZ...select [poly_EUC_ID],nz(RiskReportProductType,''),PolyMaturity from [mapped_polytypes$] 然后如果不处理内联视图/派生表中的空值,则每个 switch 语句中涉及的字段。在查询中使用 NZ 时,您需要再次将列重新命名为相同的名称......
  • @xQbert ,我尝试了这一行,不确定是否必须将其全部添加,但我现在收到错误 Undefined function 'nz' in expression

标签: sql excel vba ms-access


【解决方案1】:

CStr 这样的转换函数很容易触发null 的无效使用。不需要在连接中使用CStr,因为它会进行类型转换以获得相等。

删除以下位置的CStr

on cstr(map_transit.[Transit])=cstr(master.[Transit # (not rollup)])

on cstr(map_rfcurve.[Currency])=cstr(map_curr.[EnterpriseCurrency]))

请注意,虽然您已在这些子查询中使用 Is Not Null 进行过滤,但优化器可能会先进行连接,然后在过滤之前抛出 Invalid Use Of Null。请参阅 this answer 了解优化器执行类似操作的示例。

或者,如果你真的想转换成一个字符串,你可以使用以下:

on (map_transit.[Transit] & '' = master.[Transit # (not rollup)] & '')

将一个空字符串附加到某个东西上会将其值转换为一个字符串,即使它是 Null,也不会引发错误。

【讨论】:

    猜你喜欢
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2021-08-20
    • 1970-01-01
    • 2011-05-26
    • 2013-12-03
    • 2020-02-29
    相关资源
    最近更新 更多