服务器数据库的数据量大,一个功能只需要两张表,所以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