利用SSIS之派生列导入不规则之文本数据
问题:
文本文件作为数据源,
说明:
对于这样的问题,我的建议是 像下面这样的4列数据
SSIS中还有很多其它方法实现的,比如用脚本转换(只是遗憾SSIS好像只支持VB.NET写脚本,我只装了C#:!). 则我用派生列来解决.
测试准备:
建立一文本文件 test.txt,内容如下,存放于e:/tmp (本意为有两列,第二行中,数据不规范,分列符没有记录) aaa|bbb aaa
打开sql2005,
USE test GO CREATE TABLE tb(f1 NVARCHAR(100),f2 NVARCHAR(100)) GO 这步本来可以一起放SSIS里做 ,这里就当作准备工作了。
利用SSIS进行工作
1,打开vs.net2005,新建项目,c#>>商业智能项目>>Integration Services 项目
2,控制流里拖一个数据流任务
3,双击数据流任务编辑,进入数据流界面
4,拖一平版文件源到界面,双击进入编辑,建一个平版文件连接指向 e:/tmp/test.txt 行分隔符默认,列分隔符不选择,则默认认为一行中只有一个列,输出列命名为col
5,拖一派生列到数据流界面,并将平版文件指向它.双击派生列,进入编辑 因为我们预设的txt文件中含两列,所以这里建两个派生列 列名为 F1,作为新列添加,类型为unicode string表达式为 LEN(col) - LEN(REPLACE(col,"|","")) == 0 ? col : SUBSTRING(col,1,FINDSTRING(col,1) - 1)
列名为 f2,作为新列添加,类型为unicode string表达式为 LEN(col) - LEN(REPLACE(col,"")) >= 1 ? SUBSTRING(col,1) + 1,1000) : ""
6,拖一OLEDB目标到数据流界面,指向test库的tb表,映射关系为 F1 ->f1 F2 ->2
最后执行包,再到Sqlserver下: SELECT * FROM tb /* f
aaa bbb aaa */
其它方法我晚上回去装了VB.Net再试下。 接触SSIS几天了解不多,有好的方法,请不吝赐教 fcuandy 2009.1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |