【问题标题】:SSIS 2012 - Redirect Rows with Special CharactersSSIS 2012 - 使用特殊字符重定向行
【发布时间】:2013-09-12 17:36:05
【问题描述】:

我使用 SSIS 2012 并从平面文件源导入数据 -> 临时表 -> 最终表。 发现的任何错误都将重定向到错误文件。

但是,我会应用一个新的约束,将包含特殊字符的特定列的所有行重定向到一个单独的错误文件中,然后再将其插入临时表。

我尝试使用条件拆分,但它使用 Findstring() 函数为每个特定字符创建一个案例。 还有哪些可用的选项?

【问题讨论】:

  • 您能否发布一些您正在导入的数据以及您的表结构以及您已经完成的工作。它将帮助人们能够帮助您。
  • 此时我最初的想法是将所有内容导入临时表(A),然后将包含特殊字符的行删除到另一个临时表(B)中,并生成错误文件(B) 然后从 (A) 更新决赛桌
  • 谢谢,根据您的建议,我还使用“like '%-/&%$#%'”从源文件创建 2 个 OleDB 命令,将有效行重定向到临时表和另一个将错误的条目重定向到错误文件。

标签: sql sql-server ssis


【解决方案1】:

我会考虑将脚本组件添加到您的数据流中并让它验证您的数据。

将名为 HasJunkData 的列添加到布尔类型 (DT_BOOL) 的输出中。如果您要验证多项内容,具体取决于所需的粒度级别,您可能需要为每个输入列设置一个标志,或者只是在行级别决定其好坏。

在脚本本身内部,我会使用 How to recognize if a string contains unicode chars? 之类的东西来识别是否存在错误字符或可能是正则表达式,具体取决于“特殊字符”对您的含义。

【讨论】:

【解决方案2】:

您要处理多少个特定角色?如果只有几个,可以在条件拆分中将FINDSTRING()s与||“或”运算符结合起来,例如:

(FINDSTRING( [test_column] , "A", 1) > 0) || (FINDSTRING( [test_column] , "B", 1) > 0) || (FINDSTRING( [test_column] , "C", 1) > 0)

将 test_columns 包含“A”、“B”或“C”的行过滤到单个拆分中。

如果由于字符数而太笨拙,那么就像 billinkc 建议的那样,脚本组件是可行的方法。 (如果特殊字符可以表示为正则表达式,则特别合适,因为脚本组件可以访问非常好的正则表达式函数。)

【讨论】:

  • 特殊字符是“-/\$#&*_”。两种方法我都会尝试
  • 酷。请记住 SSIS string literals 中转义字符中的反斜杠,因此您需要将其加倍为“\\”以匹配它。
猜你喜欢
  • 2020-07-23
  • 2013-06-08
  • 2018-06-26
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多