You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OleDb异常:Left Join空布尔字段值因Order By子句被篡改?

Access OLE DB驱动左连接ORDER BY导致Yes/No字段Null值错误转为False的已知Bug

这是Microsoft Access OLE DB驱动的已知问题,仅在通过OleDb接口(包括Dapper这类基于OleDb的ORM)执行查询时触发,直接在Access客户端内执行相同SQL则无此异常。

触发场景

  • 左连接查询中右表无匹配行
  • 查询语句包含ORDER BY子句
  • 右表存在Yes/No类型字段

问题表现

右表的Yes/No字段本应返回Null,但被错误转换为False,同时依赖该字段Null判断的逻辑(如示例中的IIF(ChildTable.IsActive IS NULL...))也会失效,返回IS NOT NULL。

修复状态

目前微软官方未针对该Bug发布修复补丁,Access OLE DB驱动的更新优先级较低,该问题大概率不会被官方修复。

常见规避方案

  1. 显式通过关联字段判断来保留Null值:
SELECT
    MasterTable.ID,
    MasterTable.FirstName,
    ChildTable.ID,
    IIF(ChildTable.ID IS NULL, NULL, ChildTable.IsActive) AS IsActive,
    IIF(ChildTable.ID IS NULL, 'IS NULL', 'IS NOT NULL') As [TestNull]
FROM MasterTable LEFT JOIN ChildTable
ON MasterTable.ID = ChildTable.ID_MASTER
ORDER BY MasterTable.ID
  1. 将原查询作为子查询,在外层添加ORDER BY:
SELECT *
FROM (
    SELECT
        MasterTable.ID,
        MasterTable.FirstName,
        ChildTable.ID,
        ChildTable.IsActive,
        IIF(ChildTable.IsActive IS NULL, 'IS NULL', 'IS NOT NULL') As [TestNull]
    FROM MasterTable LEFT JOIN ChildTable
    ON MasterTable.ID = ChildTable.ID_MASTER
) AS SubQuery
ORDER BY ID

内容的提问来源于stack exchange,提问作者dovid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:12:42