簡體   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