如何从DTS / SSIS导入中删除控制字符?

时间:2010-06-28 11:28:21

标签: sql-server ssis dts

我工作的公司有很多系统,源数据源自平面文件或Excel工作簿。然后使用DTS将这些文件导入SQL Server数据库。

这些文件经常包含各种控制字符(例如,我花了一个小时才发现某些记录中有一个\0,显然SAP喜欢填充内容)理想情况下我们想剥离在他们进入我们的数据库之前。

我没有大量使用过DTS / SSIS,但我认为我们应该使用它们,或者至少是一种消毒最佳实践,我应该使用它?

任何关于如何以可重复的方式在许多进口产品中做到这一点的想法都将受到赞赏。

3 个答案:

答案 0 :(得分:1)

我只能说出我对SSIS的经验,所以如果这只是一点点用处,我会道歉。

就一般卫生而言,我没有遇到过这项工作的任何目的构建组件。我认为这是因为不同的场景可能对“坏数据”的定义有很大不同,但可以说剥离不可打印的字符可能是一个常见的业务需求,所以这有点令人惊讶。

当然,您总是可以依赖于派生列转换,或者在更复杂的情况下,可以依赖脚本组件,但这些几乎不会使包中的逻辑复制变得无痛。在某些情况下,我们使用CozyRoc组件来创建我们可以在包之间共享的脚本,但除了必须首先实际访问这些组件之外,它还涉及每个设置的特定级别的设置。时间你需要这个功能。

所以,在这种情况下,我个人认为最好的选择是将您的共同卫生程序合并到Custom Data Flow Component。我们为自己开发了一个处理一些非常常见的数据验证逻辑,并设置组件编辑器,以便您可以选择复选框以启用您想要应用于给定列的任何检查。然后它就变成了拖放和连接数据流的问题。至少对我们来说,绝对值得花时间来开发组件。

我不知道DTS在这方面提供了什么(我认为它相当有限,或者至少不友好,但我可能是错的),所以这可能对你的传统包没有用。在这种情况下,我认为Cade的解决方案可能是最无压力的,假设它对您的输入数据是可行的。

就SSIS的一般见解而言,我发现Jamie Thomson的blogs(以前here)非常有帮助,所以你可能想检查一下他之前是否讨论过这个特定话题。 / p>

无论如何,希望这至少有点帮助,祝你好运,想出一个解决方案。

旁注:感谢您希望在将数据粘贴到数据库之前对其进行清理。我们从没有清理其数据的特定供应商处获取数据,然后尝试将其推送到XML以通过Web服务发送给我们。不用说,XML解析器不太喜欢不可打印的字符。

答案 1 :(得分:0)

如果可以随时简单地替换/删除某些字符,那么我们通常使用自定义C程序处理此预导入。这显然不适用于二进制文件或任何具有可变长度列长指示符列或EBCDIC等的东西,但是当它可以使用时,它可以应用而不管导入工具。

答案 2 :(得分:0)

根据您的需要,您还可以执行以下操作:

  1. 将数据(通过SSIS / DTS)导入数据库中的“临时”表
  2. 在您的数据库中有一个'sanitize'表,包含(每行)您想要删除的任何字符串(或替换为其他字符串)。此表可以为不同的场景添加其他列,当然
  3. 使用游标逐步浏览表并进行清理。
相关问题