繁体   English   中英

SSIS 组件从数据流中的所有 (n)varchar 字段中删除换行符

[英]SSIS component to remove linefeeds from all (n)varchar fields in dataflow

我使用 SSIS 组件从 API 检索数据。 API 提供 XML,此 XML 包含如下数据:

<tag>
code
</tag>

“代码”之前和之后的换行符

这意味着在 SQL 中我的 (n)varchar 列中输入的内容如下所示: CHAR(10)codeCHAR(10)

这会造成很多麻烦,尤其是报告中的情况。 所以 CHAR(10) 需要消失。 它需要在我的数据流中的源组件和目标组件之间被过滤掉。 我可以为此使用派生列,但它涉及(总共)385 个(n)varchar 字段的 9 个数据流。 很多工作! 是否可以使用在每个 (n)varchar 上简单地执行replace(field,linefeed,'')的脚本组件? 这样所有数据都通过该组件并在没有换行符的情况下退出?

如果是这样,我该怎么做? 我对 SQL 非常满意,可以阅读大多数语言,但需要一些帮助才能在 VB.NET 的 C# 中编写此内容。 我在 VS2019 中设计这个并部署到 ADFv2 IS。 目标是 SQL Azure 数据库。

在 SSIS 作业运行后,我不能简单地运行一些 SQL,因为下一次运行将对数据进行更新插入。 然后它将得出结论CHAR(10)codeCHAR(10)code不同并插入新行,违反了对code的唯一约束。 所以这就是为什么我需要在获取数据之后和写入数据之前这样做。

您不一定需要 SSIS 来执行此操作。 您可以使用TRIM ZC1C425268E685D1AB5074C17A94F14Z在Z97778840A0100CB30C9C9C9C9C9MB0B0B0B5A2ASERVE 将您的 XML 插入与原始表相同的临时表中。 然后调用一个存储过程来清理 XML 并可选择将其插入到另一个表中。 一个例子:

--INSERT INTO ...
SELECT 
    TRIM( CHAR(10) + CHAR(13) FROM someXML.value( '(tag/text())[1]', 'VARCHAR(20)' ) ) trimmedTag
FROM xmlTest

TRIM让您可以选择添加要删除的字符。 在上面的示例中,我使用CHAR function 分别删除换行符 (10) 和回车符 (13)。

在 SSIS 中,您可以使用执行 SQL 任务来调用 proc。

以性能为代价,我找不到不需要大量编码的解决方案。 我尝试的一种解决方案是将 XML 编写为 CSV,在 CSV 上进行搜索和替换,然后将其导入表中。 虽然它有效,但它使解决方案变得不必要的复杂,并且在性能方面是有害的。 它是在对抗症状,而不是解决问题。 所以我去和提供 API 的人交谈,他们删除了这些换行符。 结果证明这是唯一好的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM