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
相关产品推荐
相关产品推荐

