博客前言:
今年部门里面要求把decommission老系统提上了日程,每个组都有不同的指标。因此前段时间开始了decommission第一个老系统。老系统需要把Excel作为数据源,用VBA去抽取数据。木有各种项目文档,木有各种数据字典。只有一代一代的opration同事手把手的交接。苦啊!于是我们就开始了用Excel作为数据源的漫漫征程。
环境:SQL SERVER 2008, SSIS 2008
罪行描述:
(按罪大恶极程度从上往下排序)
1. 假如Excel某列存储的是带两位小数的数字比如23.72,导入数据库后会变成23.71999999或者科学计数法;
2. 若该列中前几行是存储的正常数字(连续的数字比如87231234),后面有一些数据中间会有一些空格(比如76 21 89 198),或者第一位数是0(比如09823124),后面说的两种情况被导入数据库之后都会被置成null;
3. Excel里面的sheet名字必须固定写死,且不能有空格。
解决方法:
最好将excel转换为听话的csv文件进行处理,在csv里面,将csv导入staging表里面全是基本字符串格式,想咋样就咋样,想干嘛就干嘛。
在SSIS里面可以用script command的方式引用excel,或者在advanced editor里面进行设置.
结论:
没事的话最好不要将Excel作为数据源,因为里面的单元格格式实在是很多ETL工具难以完美驾驭的,遇到问题即便也能解决,但是也要脱你几层皮,程序员的头发不容易啊。