![](/img/trans.png)
[英]SSIS Script Component to remove '\0' charachers in CHAR(n) fields
[英]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.