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

SQL Server 2019链接Access 2002-2003 Long Text字段插入报错求助

解决方案:SQL Server 2019链接Access mdb插入Long Text字段报错(Msg 7344)

针对你遇到的SQL Server 2019通过链接服务器向Access 2002-2003 mdb的Long Text字段插入nvarchar数据时报错的问题,以下是经过验证的解决思路:

1. 调整链接服务器提供程序配置

打开SQL Server配置管理器,找到Microsoft.ACE.OLEDB.12.0提供程序:

  • 勾选Allow inprocess选项,确保提供程序在SQL Server进程内运行,避免跨进程数据类型转换问题
  • 启用Dynamic parameter选项,让提供程序支持动态参数绑定,优化数据类型映射

2. 明确强制数据类型转换

不要仅用CAST转换,需明确指定非Unicode字符类型及长度,示例:

-- 插入时强制转换为VARCHAR(MAX)适配Access Long Text
INSERT INTO [AccessLinkedServer]...[TargetTable] (LongTextColumn)
SELECT CAST(YourNVarcharColumn AS VARCHAR(MAX)) FROM SQLServerSourceTable;

如果Access字段有长度限制,替换为对应长度(如VARCHAR(2000))。

3. 使用OPENQUERY绕开链接服务器类型映射问题

通过OPENQUERY让Access引擎直接处理数据插入,避免SQL Server自动类型映射错误,示例:

INSERT INTO OPENQUERY(AccessLinkedServer, 'SELECT LongTextColumn FROM TargetTable')
SELECT CAST(YourNVarcharColumn AS VARCHAR(MAX)) FROM SQLServerSourceTable;

4. 重新创建链接服务器并调整参数

删除现有链接服务器,用系统存储过程重新创建,同时启用排序规则兼容:

-- 删除旧链接服务器
EXEC sp_dropserver 'AccessLinkedServer', 'droplogins';

-- 创建新链接服务器
EXEC sp_addlinkedserver
    @server = N'AccessLinkedServer',
    @srvproduct=N'Access',
    @provider=N'Microsoft.ACE.OLEDB.12.0',
    @datasrc=N'C:\YourPath\Database.mdb';

-- 添加登录映射
EXEC sp_addlinkedsrvlogin
    @rmtsrvname=N'AccessLinkedServer',
    @useself=N'False',
    @locallogin=NULL,
    @rmtuser=N'',
    @rmtpassword=N'';

-- 启用排序规则兼容
EXEC sp_serveroption 'AccessLinkedServer', 'collation compatible', 'true';

5. 升级Access Database Engine版本

安装Access Database Engine 2016 x64版本,它对Windows Server 2019和SQL Server 2019的兼容性更好。安装时需静默执行避免Office组件冲突:

AccessDatabaseEngine_X64.exe /quiet

6. 检查Access字段属性

打开目标Access mdb文件,查看Long Text字段的Text Format属性,确保设置为Plain Text(而非Rich Text),Rich Text会存储额外格式标记,可能导致插入失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:15:53