SSIS中的条件拆分-SQL



我对SQL数据库还很陌生,但我正试图在平面文件源和OLE DB数据库之间的数据流中添加一个条件拆分,以排除在[title]列中包含一些特殊字符(如ø和?和?(的记录。这些会在创建表时导致错误,因此我希望将这些记录从表中分离出来。如何为此创建条件拆分?

作为奖励:有没有一种方法可以只在条件拆分中过滤包含0-9数字和a-zA-Z字母的行;特别的";符号会自动过滤掉吗?

条件拆分的工作原理是确定条件是true还是false。因此,如果您可以编写一个评估结果为true或false的规则,并且您可以使用多个规则来满足各种业务需求,那么您就可以正确地将行分流到不同的路径中。

我该怎么做

我一直主张人们在数据流中添加新的列来处理这些事情。当出现您认为应该处理但没有处理的条件时,这是您必须进行调试的唯一方法。

创建一个名为IsTitleOnlyAlphaNumeric还是IsTitleInternational的列实际上取决于您。一般编程规则是选择常见/可能的情况。由于ASCII范围最多127个字符,扩展ASCII最多255个字符,所以我主张前者。否则,你将玩打地鼠游戏,因为下一个文件中有umlats或荆棘

通常,我们会通过派生列转换添加一个新列,这意味着您正在使用SSIS表达式语言。然而,在这种情况下,表达式不具有优雅地*识别字符串是否良好的能力。相反,您将希望使用.NET库来完成这项繁重的工作。这就是脚本组件,您将使它在变换模式(默认(下运行。

添加一个类型为boolean IsTitleOnlyAlphaNumeric的新列,并从c#中的字符串中的检查字母数字字符中筛选正则表达式

OnRowProcessed的相关位(近似名称(看起来像

Row.IsTitleOnlyAlphaNumeric = isAlphaNumeric(Row.Title);

随着行的流动,将对每一行进行评估,您将看到它是否符合标准。根据您的数据,在调用该方法之前,您可能需要检查NULL。

我怎么不该那样做

*可以滥用REPLACE函数的日光,并通过创建一个名为StripedTitle的新列来测试表达式的允许长度,我们将用空字符串替换所有允许的字符。如果修剪后的最后一个字符串的长度不为零,那么里面就有不好的东西。

REPLACE(REPLACE(REPLACE([Title], "A", ""), "B", ""), "C", "") ..., "a", ""), "b", "") ..., "9", "")

在哪里。。。意味着你已经延续了这种模式。是的,您必须替换大小写字符。ASCIITable.com或类似网站将是您的朋友。

这将是一个新的专栏。因此,添加第二个派生列组件来计算它是否为空——同样,更容易调试。IsTitleOnlyAlpha数字

LEN(RTRIM(StrippedTitle)) == 0

可怕的方法,但我回答的问题数量,人们后来澄清";我不能使用脚本";绝对是非零的。

相关内容

  • 没有找到相关文章

最新更新