" />
VB   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了利用SSIS之派生列导入不规则之文本数据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

问题@H_618_72@:

@H_618_72@

文本文件作为数据源,@H_618_72@
模式选择的右端未对齐,行分隔符是回车换行,@H_618_72@
列数有很多,但是最后两列在原始导入@H_618_72@TXT时由于是字符型的,且可以为空,@H_618_72@
所以最后两列可能同时为空,@H_618_72@
导致这样的行和别的行的宽度要少这两个列的列宽和;@H_618_72@
图片显示:@H_618_72@2841-2844列是倒数第二行,@H_618_72@
2845-2853是倒数第一行,@H_618_72@
第一行为完整的@H_618_72@2853列,@H_618_72@
第四行数据实际为@H_618_72@2841列,@H_618_72@
在不做任何处理直接导入@H_618_72@(txt作为源@H_618_72@,sql作为目的@H_618_72@)@H_618_72@
导入的时候前三行没有问题,@H_618_72@
但导入类似第@H_618_72@4行到第@H_618_72@11行会报错。

@H_618_72@

@H_618_72@

说明@H_618_72@:

@H_618_72@

对于这样的问题,我的建议是

像下面这样的@H_618_72@4列数据@H_618_72@
aaa|bbb|ccc|ddd
aaa|bbb|ccc|
aaa|||
尽管后面两行列不完整,在插入文本数据时,还是要把分融符带上的

@H_618_72@

@H_618_72@SSIS中还有很多其它方法实现的,比如用脚本转换(只是遗憾@H_618_72@SSIS好像只支持@H_618_72@VB.NET写脚本,我只装了@H_618_72@C#:!@H_618_72@.

则我用派生列来解决@H_618_72@.

@H_618_72@

测试准备@H_618_72@:

@H_618_72@

建立一文本文件@H_618_72@ test.txt,内容如下,存放于@H_618_72@e:/tmp (本意为有两列,第二行中,数据不规范,分列符没有记录@H_618_72@)

@H_618_72@aaa|bbb

@H_618_72@aaa

@H_618_72@

打开@H_618_72@sql2005,

@H_618_72@

@H_618_72@USE test

@H_618_72@GO

@H_618_72@create table tb(f1 NVARCHAR(100),f2 NVARCHAR(100))

@H_618_72@GO

这步本来可以一起放@H_618_72@SSIS里做 ,这里就当作准备工作了。

@H_618_72@

利用@H_618_72@SSIS进行工作@H_618_72@

@H_618_72@

@H_618_72@ 1,打开@H_618_72@vs.net2005,新建项目@H_618_72@,c#>>商业智能项目@H_618_72@>>Integration services 项目

@H_618_72@

@H_618_72@ 2,控制流里拖一个数据流任务

@H_618_72@

@H_618_72@ 3,双击数据流任务编辑@H_618_72@,进入数据流界面

@H_618_72@

@H_618_72@

@H_618_72@

@H_618_72@ 4,拖一平版文件源到界面,双击进入编辑,建一个平版文件连接指向@H_618_72@ e:/tmp/test.txt

@H_618_72@ 行分隔符默认@H_618_72@,列分隔符不选择,则默认认为一行中只有一个列,输出列命名为@H_618_72@col

@H_618_72@

@H_618_72@ 5,拖一派生列到数据流界面,并将平版文件指向它@H_618_72@.双击派生列,进入编辑

@H_618_72@ 因为我们预设的@H_618_72@txt文件中含两列,所以这里建两个派生列

@H_618_72@ 列名为 @H_618_72@F1,作为新列添加@H_618_72@,类型为@H_618_72@unicode String表达式为

@H_618_72@LEN(col) - LEN(replaCE(col,"|","")) == 0 ? col : SUBStriNG(col,1,FINDStriNG(col,@R_197_7636@)

@H_618_72@

列名为@H_618_72@ f2,作为新列添加,类型为@H_618_72@unicode String表达式为

@H_618_72@LEN(col) - LEN(replaCE(col,"")) >= 1 ? SUBStriNG(col,1) + 1,1000) : ""


@H_618_72@

@H_618_72@

@H_618_72@

@H_618_72@6,拖一@H_618_72@OLEDB目标到数据流界面,指向@H_618_72@test库的@H_618_72@tb表,映射关系为

@H_618_72@F1 ->f1

@H_618_72@F2 ->2

@H_618_72@

最后执行包,再到@H_618_72@Sqlserver@H_618_72@:

@H_618_72@SELECT * FROM tb

@H_618_72@/*

@H_618_72@f 1 f 2

@H_618_72@aaa bbb

@H_618_72@aaa

@H_618_72@*/

@H_618_72@

@H_618_72@

其它方法我晚上回去装了@H_618_72@VB.Net再试下。

接触@H_618_72@SSIS几天了解不多,有好的方法,请不吝赐教

@H_618_72@ fcuAndy

@H_618_72@2009.1

大佬总结

以上是大佬教程为你收集整理的利用SSIS之派生列导入不规则之文本数据全部内容,希望文章能够帮你解决利用SSIS之派生列导入不规则之文本数据所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。