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

时间:2013-04-23 14:36:41

标签: ssis

我正在试图弄清楚如何将现有的DTS文件转换为SQL Server服务器上托管的DTSX。

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

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

必须做些什么。

  • 检查输入文件是否存在,否则退出。(尚未完成)
  • 截断目的地表
  • 将文件导入数据库
  • 报告是否一切正常。

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

我首先尝试了一个派生列,但是可以找到分割(第一个)数字部分的检查。

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

还有其他可能吗?

这让我想到第二个问题:是否可以将SQL Server数据工具(SSDT)与SQL Server 2005一起使用。

1 个答案:

答案 0 :(得分:0)

你有一份工作在你前面。您将需要使用Derived Column转换,因此请查找它们。将Data Viewers添加到数据流中会很有帮助,这样您就可以看到流中的数据以及SSIS认为的数据。

在您的情况下,您将不得不操纵字符串。有两种字符串数据类型,DT_STR和DT_WSTR(例如,VARCHAR和NVARCHAR)。 SSIS非常关注数据类型,您可能必须使用强制转换操作将一种类型转换为另一种类型。例如,(DT_WSTR,50)Blah将列Blah中的50个字符转换为DT_WSTR。 DT_STR类型还需要知道代码页。例如像1252这样的东西。

您可能需要SSIS版本Immediate If,它检查条件是否为真,并返回一个结果或另一个结果:Blah == 100?1:0结果为1对于列Blah等于100的记录,对于所有其他记录为0。你可以嵌套这些立即If语句,其中一个在下一个语句中,在下一个语句中,并且等等。

您需要在Derived Column小部件中创建至少两个新列,一个用于数字,另一个用于后面的内容。所以这是一个非常痛苦的方法来做你想要的。使用字符串函数检查第一个字符是否为数字,然后返回或不返回。为第二个角色做同样的事情。

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

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