2017-04-17 30 views
1

我期待在SSIS包用Derived Column數據流組件爲什麼這個SSIS轉換表達式語法是這樣的?

的時候,我打開它,我看到1種轉換:

Derived COLUMN Name : CLIENT_ID 
Derived COLUMN: "REPLACE 'CLIENT_ID'" 
EXPRESSION: TRIM(CLIENT_ID) == "" ? (DT_STR,9,1252)NULL(DT_STR,9,1252) : CLIENT_ID 
DATA TYPE: string [DT-STR] 
LENGTH: 9 
PRECISION: 
SCALE: 
CODE PAGE: 1252 (ANSI- LATIN I) 

我想了解SSIS表達和我我不確定是否理解語法。

TRIM(CLIENT_ID) == "" ? (DT_STR,9,1252)NULL(DT_STR,9,1252) : CLIENT_ID 

我相信代碼在CLIENT_ID場從平面文件讀取和領域作爲字符串來英寸轉換似乎檢查讀取的值是否全部爲空白,如果是,則轉換爲NULL字符串值,否則使用原始的CLIENT_ID字符串值。

轉換的語法使我困惑,也許是因爲我想把它與C#代碼聯繫起來。我期待爲表達式如下:

TRIM(CLIENT_ID) == "" ? NULL : CLIENT_ID 

或許

TRIM(CLIENT_ID) == "" ? (DT_STR,9,1252)NULL : CLIENT_ID 

爲什麼NULL由轉換所包圍:(DT_STR,9,1252)

+0

這只是在'DT_STR'數據類型發生的情況下,如果你轉換爲'DT_WSTR'這個表達式才能工作'TRIM(CLIENT_ID)==「」? NULL(DT_WSTR,9):(DT_WSTR,9)CLIENT_ID' ...這有點令人困惑。也許這是一個字符串編碼問題 – Hadi

+1

可能重複[這是什麼意思? LEN(TRIM(Weight))== 0? (DT \ _STR,50,1252)NULL(DT \ _STR,50,1252):(DT \ _STR,50,1252)Weight(http://stackoverflow.com/questions/15858210/what-does-this- mean-lentrimweight-0-dt-str-50-1252nulldt-str-50-125) – Hadi

回答

1

SSIS有一個​​。例如,NULL(DT_STR,9,1252)表示特定於該代碼頁上的九個字符串的空值。

和C#一樣,第一個(DT_STR,9,1252)是一個類型轉換。當然,這裏不需要演員,因爲NULL已經具有正確的數據類型。

+0

當我以前試過TRIM(CLIENT_ID)==「」時,得到語法表達式錯誤? NULL(DT_STR,9,1252):CLIENT_ID,所以它仍然有必要將「string NULL」轉換爲一個字符串,這很奇怪。 – ChadD

+0

我不知道爲什麼在目標列的數據類型已經通過空類型定義之後,額外的轉換似乎是必要的。 – criticalfix

相關問題