SQLServer 导入 Excel 表数据报错“文本被截断。。。”
报错详情(关键信息就是:文本被截断)
错误 0xc020901c: 数据流任务 1: 输出“Excel 源输出”(9) 上的 输出列“xxxxx”(78) 出错。返回的列状态是:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项。”。
注:其中,‘xxxxx’代表的是列名,数字‘78’代表的是行序。
报错原因
文本被截断,就是文本太长了,无法保存到数据表中。
那为什么会超过限制呢?
原来,SQLServer 在导入数据时,会根据首行数据,自动识别出数据类型和字段长度,而文本则是默认长度 255。所以,当后续某个文本长度超过 255 时就会报错,导致全部数据导入失败,但是临时表已经创建成功。
如下是自动创建的表的个别字段:
示例测试
测试表格数据示例:(长文本为 256 位字母)
普通文本 长文本 数字 大数字 大数字带小数位 大数字带小数位文本 日期
测试内容 dsfadfasdfasdfasdfadfasdfasdfasdfadffadfasdfasdafasdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1 999999999 10000.99 100000000.99 2024/2/2
自动创建表的结构:
当单元格中的文本长度大于 255 时,则会自动将 varchar 类型的长度生成为 MAX,此时就不会再出现截断报错。
解决方案
(首选)直接在表中首行添加一行,将可能存在超过 255 的列填入大于 255 长度的字符,然后在导入成功后,手动删除即可。
数据量不大的话,也可以再提示导入失败后,通过 sql 语句 alter table tablename01 alter column [columnname] varchar(2000) 来手动修改表结构,然后把数据粘贴进表中。
本文来自博客园,作者:橙子家,欢迎微信扫码关注博主【橙子家czzj】,有任何疑问欢迎沟通,共同成长!