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

MS Access 2022链接SQL Server 2012表全行列显示#Deleted如何解决

故障根因

该故障是MS Access 2022即点即用版本(Build 14931.20392属于2022年9月更新的当前通道版本)的已知兼容性问题,和权限、驱动本身、链接配置无关:

  • Access 2022从该版本开始默认启用了针对SQL Server链接表的增强元数据校验逻辑,拉取数据后会严格比对行唯一标识、字段类型精度、行版本戳的元数据标记,一旦标记不匹配就会直接判定该行已删除,返回#Deleted占位符。
  • SQL Server 2012默认使用TDS 7.1协议返回结果集,其rowversion/timestamp字段、大值类型字段的元数据标记格式和Access 2022新校验逻辑的预期格式不匹配,直接触发全表判定为已删除的现象。
  • 已开展的排查结果完全符合该问题的特征:换驱动、刷新链接不会改变Access本身的校验逻辑,旧版本Access(2018/2019)未启用该严格校验,因此不会复现故障。
可行解决方案

按落地成本从低到高排序,选其一即可:

  • 方案1:关闭Access全局增强校验开关
    打开Access 2022,进入「文件 > 选项 > 当前数据库」,滚动到页面底部的数据引擎设置区域,取消勾选针对SQL Server使用增强元数据校验,确认后重启Access,刷新链接表即可恢复正常。该配置为客户端全局配置,一次修改对所有本地打开的Access数据库生效。
  • 方案2:通过连接参数指定旧版TDS协议
    无需修改全局配置,给所有SQL Server链接表的连接串追加TDS_Version=7.0参数,强制Access用旧版协议逻辑解析返回结果。可直接运行以下VBA代码批量修改:
    Sub FixLinkedTableConnect()
        Dim tdf As TableDef
        For Each tdf In CurrentDb.TableDefs
            ' 仅处理带连接串的SQL Server链接表
            If Len(tdf.Connect) > 0 And InStr(tdf.Connect, "SQL Server") > 0 Then
                If InStr(1, tdf.Connect, "TDS_Version", vbTextCompare) = 0 Then
                    tdf.Connect = tdf.Connect & ";TDS_Version=7.0"
                    tdf.RefreshLink
                End If
            End If
        Next
        Set tdf = Nothing
        MsgBox "链接表修复完成"
    End Sub
    
  • 方案3:服务端打补丁适配新校验逻辑
    给SQL Server 2012安装SP4及后续最新累积更新,补丁会补全TDS协议返回的元数据标记格式,适配Access 2022的新校验规则。该方案适合域内统一推送客户端、不方便修改用户本地Access配置的企业环境,补丁安装完成后需重启SQL Server服务生效。
  • 方案4:回退Access版本
    将客户端Access 2022回退到Build 14332.20000之前的版本,该版本上线前未启用增强元数据校验逻辑,不会触发该故障。

注意:无需浪费时间排查32/64位驱动匹配、表主键缺失、用户权限类问题,相同文件在旧版本Access可正常运行,已经排除以上因素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:42:31