2010-10-01 53 views
3

我有一個數據流,其中有一個數據庫源和一個平面文本文件目標(由管道'|'分隔)。 數據庫源代碼正在從變量中提取SQL查詢。在SSIS中寫入目的地之前修剪?

問題是,如果我的發言權,名字和姓氏數據庫字段的大小是30個字符,我得到的輸出(空間由點表示)

saurabh......................|kumar.......................

我需要的是田野修剪,使實際產量

saurabh|kumar

我有40分多列寫了,我不希望在每列後手動插入RTRIM我的BIG sql查詢:(

我應該補充說,源可以有多達50,000行返回。我正在考慮在它們之間放置一個腳本組件,但處理每一行都可能會對性能產生影響。

任何想法?

回答

9

你有很多選擇,但有些顯然會因你的情況而不可取或不可能做到。

首先,我假定數據中的尾隨空格是因爲源列的數據類型是CHAR或NCHAR。您可以將源數據庫中的數據類型更改爲VARCHAR或NVARCHAR。這可能不是一個好主意。

如果源數據中的數據類型爲VARCHAR或NVARCHAR,並且數據中有尾隨空格,則可以更新數據以刪除尾隨空格。這可能也不吸引人。

所以,你有SSIS和處理這個最好的地方是在數據流中。不幸的是,您必須爲每個具有尾隨空格的列開發解決方案。我認爲你不會找到一個快速簡單的「修復所有列」解決方案。

您可以使用腳本轉換來完成數據修剪,但您必須編寫代碼來完成這項工作。或者,您可以使用派生列轉換組件。在派生列轉換中,您需要爲需要修剪的每列添加派生列。例如,您將有一個名字列和一個姓氏列。派生列值將取代現有列值。

在派生列轉換中,您將使用SSIS表達式語法來修剪數據。名字和姓氏裝飾表現將

RTRIM(firstname) 
RTRIM(lastname) 

性能可能會派生列轉換更好,但它可能不會從腳本解決方案太大的差別。但是,派生列轉換可能會稍後更易於閱讀和理解。

+0

我已經使用了派生列轉換。 – FumblesWithCode 2015-05-22 00:12:58

0

您可以嘗試在數據流中使用腳本組件嗎?與控制流不同,數據流腳本組件具有輸入&輸出。

請看下面的例子在MSDN:http://msdn.microsoft.com/en-us/library/ms345160.aspx

如果可以遍歷行,因爲它流經腳本組件,你可以做一個.net在列的數據修剪,然後傳遞的每一列(?)修剪的行到輸出。

那裏的優點當然是它會修剪你以後添加的行。

只是一個想法,我沒有嘗試過這個我自己。如果有效,請發回。

+0

我可能有多達50,000行,約40列。通過腳本組件處理每個腳本組件可能會對我產生嚴重的性能影響:/ – 2010-10-01 16:07:31

+0

@Saurabh - 我已經使用腳本數據流組件來執行其他任務,並且性能很好。在那一箇中​​,我使用了一個分隔字符串並將其拆分成列,然後將每行發送到輸出緩衝區。我認爲值得一試 - 50k行和40列並不多, – Meff 2010-10-04 07:53:50

相關問題