将SSIS中的列拆分为数字部分和列值的其余部分

问题描述:

我想弄清楚如何将现有的DTS文件转换为托管在SQL 2005服务器上的DTSX。将SSIS中的列拆分为数字部分和列值的其余部分

在我的第一次尝试(第一DTS)我已经卡住了。

我不想看看如何使用DTS完成任务,并且要专注于新的DTSX技术。

需要做些什么。

  • 检查输入文件是否存在其他退出。(尚未完成)
  • 截断目标表
  • 文件导入到数据库
  • 报告,如果一切是好的。

步骤导入文件是我卡住的地方。我有一个固定的列大小平坦的tekst文件,其中housenumber和扩展名在一个列中。数据库有两列。

我第一次尝试派生列,但可以找到一个检查splittng(第一)数字部分。

当搜索的使用正则表达式的我读到了“脚本组件”,我读的是不兼容SQL 2005

是否有另一种可能性?

这使我第二个问题:是否可以使用SQL Server数据工具(SSDT),在SQL Server 2005

+0

你可以发布'housenumber'和'extension'的样本数据吗? – praveen 2013-04-23 14:42:15

+0

它只是一个数字部分和扩展名:可能是“2B”,“24 A”,“15 II”或类似的东西。所以我想要数字的第一部分。其次是一些不是数字的东西(可能是被另一个数字部分覆盖的空白) – 2013-04-23 14:52:18

+0

AFAIK SSIS没有任何函数使用'通配符'来执行'正则表达式匹配',但您始终可以使用'脚本component'来提取数字和字符串.Ex“@”\ d +“'或'[A-Za-z] +'.BTW为什么'脚本组件与SQL 2005'不兼容? – praveen 2013-04-23 15:17:22

你有一份工作之前,你。您需要使用Derived Column转换,请查看它们。将Data Viewers添加到您的数据流将会很有帮助,这样您就可以看到什么数据在流中移动,以及SSIS认为在那里。对你而言,你将不得不操纵字符串。有两种字符串数据类型,DT_STR和DT_WSTR(例如,VARCHAR和NVARCHAR)。 SSIS对数据类型非常特别,您可能需要使用投射操作将一种类型转换为另一种类型。例如,(DT_WSTR,50)Blah将列Blah中的五十个字符转换为DT_WSTR。 DT_STR类型也需要知道代码页。例如像1252

您可能需要的Immediate If的SSIS版本,如果条件为真,并返回任何一个结果或其他哪些检查:胡说== 100?1:0这样的结果将是一个1表示列Blah等于100的记录,0表示所有其他记录的记录。你可以嵌套这些立即如果语句,一个在下一个内部,另一个在内部,等等。

您需要在派生列小部件中创建至少两个新列,其中一个用于数字,另一个用于后续内容。所以这是一种非常痛苦的方式来做你想做的事情。使用字符串函数来检查第一个字符是否是数字,然后返回或不。对第二个字符等做同样的操作。

当然,我确信有更好的方法来做到这一点。您的工具箱由Derived Column小部件中的函数组成,所以这就是您必须使用的。 (或者,或者,在这种情况下,您可能会更好地使用SQL UPDATE语句,该语句将作为上述控制流中的后续任务执行,而不是在下面的数据流中执行。)

公平的警告:SQL Server 2005版本的SSIS有许多许多错误和挫折,这些错误和挫折在SQL Server的更高版本中得到修复或改进。即使你只是去SQL Server 2008,你也会为自己节省很多麻烦。