SSMS导出SQL Server数据到Excel报0xc0204016长度错误如何解决
报错0xc0204016的可行解决方案
该报错的本质是SSIS导出流程默认对字符类型字段设置了4000的长度上限,当库中存在varchar(max)、nvarchar(max)类型字段,或是单字段存储的字符长度超过4000时,就会触发该校验报错,可参考以下方案处理:
导出前在SQL侧预处理字段
导出向导中不直接选择源表,选择编写查询以指定要传输的数据选项,通过SQL语句对超长字符字段做适配处理:- 若可以接受截断超长内容,使用
LEFT函数限制字段长度,示例:SELECT LEFT(超长字段名, 4000) AS 超长字段名, 其他字段列表 FROM 源表名 - 若使用Excel 2007及以上版本(单单元格最大支持32767字符),可以将字段转换为
NTEXT类型绕过SSIS默认长度校验,示例:SELECT CAST(超长字段名 AS NTEXT) AS 超长字段名, 其他字段列表 FROM 源表名
- 若可以接受截断超长内容,使用
修改SSIS导出向导的字段映射配置
完成指定表复制或查询步骤后,进入配置目标表页面,点击编辑映射按钮:- 找到报错对应的字符类型字段,将目标侧的字段类型修改为Long Text或
NTEXT - 同步将字段的
长度参数调整为大于字段实际存储的最大长度,最大可设置为2147483647
- 找到报错对应的字符类型字段,将目标侧的字段类型修改为Long Text或
调整Excel驱动的兼容配置
- 导出.xlsx格式文件时,不要选择旧版
Excel 97-2003驱动,选择对应版本的高版本Excel xlsx驱动 - 打开SSIS项目属性,找到
调试选项,将Run64BitRuntime参数设置为False,规避64位Excel驱动的长度兼容问题
- 导出.xlsx格式文件时,不要选择旧版
使用替代导出方案避开SSIS长度限制
- 数据量较小时,可以直接在SSMS查询窗口执行全量数据查询,右键结果集选择
将结果另存为,导出为CSV格式后再用Excel打开 - 也可以直接通过SQL语句写入Excel文件,无需走SSIS导出向导,示例语法:
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;Database=C:\目标存储路径\导出文件.xlsx', 'SELECT 字段1,字段2 FROM [Sheet1$]') SELECT 字段1,字段2 FROM 源表名
- 数据量较小时,可以直接在SSMS查询窗口执行全量数据查询,右键结果集选择
内容的提问来源于stack exchange,提问作者Abdul Samad
相关产品推荐
相关产品推荐

