CSV导入数据至SQL Server问题解决Text was truncated or one or more characters had no match in the target code

服务器数据库的数据量大,一个功能只需要两张表,所以DBA直接导出Excel文件Copy过来,开始:

1, 导入Excel 

尝试好几轮,一直出现类似‘OLE 12.0/13.0/15.0’的错误,甚至安装了AccessRuntime多个版本,未遂

(可以使用SQL命令查看本机中安装的provider的列表:EXECUTE MASTER.dbo.xp_enum_oledb_providers)

2, 导入CSV

a, 打开Excel,分别打开各个sheet,另存为CSV (底部有解决Excel无法导入的问题)

b, SSMS中右击需要导入的DB名称=》任务=》导入数据

c, 在导入导出向导中下一步,数据源选择Flat File Source, 选择其中某个CSV

d, 下一步,选择目标数据库,输入连接account,继续

e, 数据源和目标的映射界面,不做任何调整,继续

f, 一直到最后一步,运行

iiiii,错误产生:The data conversion for column "" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.".

 

开启慢慢分析错误之路:

a, 字面分析是列的长度给的不够,在步骤e打开Edit Mapping, 修改列为varchar(max), 未能解决

b, 既然目标列已经更改,错误还是一样,那是不是源读取的问题,返回步骤c,左侧有“General”, "Columns", "Advanced", "Preview", 打开“Advanced”,里面可以调整读取的长度,设置从默认的50修改为200,问题解决了

c, 拓展下b的思维,一定非要这样更改吗?不是,这个的读取长度取决于前1或者多少条(不太清楚)的数据,所以,假设把最长的数据放在第一行,就不会出现这样的问题。

 

至此,问题引刃而解,总结一下,在得出b的方案也是和同事的帮忙,打开思维局限性,知识共享,收获更多。

附:解决导入Excel问题 The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine” 

1,初步分析是导入Excel的OLEDB的驱动没有安装, 从link:http://www.microsoft.com/en-us/download/details.aspx?id=13255 下载安装,其区分32和64位,按你的SQL Server版本

2,安装后再运行,问题照旧。本机SQL为64位,按照reference2的建议,直接找到64位DTSWizard.exe运行“C:\Program Files\Microsoft SQL Server\110\DTS\Binn\DTSWizard.exe”(110根据机器安装版本决定),遂解决。

总结:直接从SQL Server=>Task=>Import Data可能打开的是非符合SQL版本的DTWizard.exe, 而SQL如何安装为64位,则无法安装32位的驱动,需要手动打开64位DTWizard.exe。

 

Reference:

【1】https://blog.sqlauthority.com/2015/06/24/sql-server-fix-export-error-microsoft-ace-oledb-12-0-provider-is-not-registered-on-the-local-machine/

【2】https://stackoverflow.com/questions/9943065/the-microsoft-ace-oledb-12-0-provider-is-not-registered-on-the-local-machine

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值