Ssis
SSIS 派生列轉換為 DT_STR
為什麼我不能將它轉換為 DT_STR - 數據源是 WSTR,但這種轉換不應該使輸出 DT_STR 嗎?
(IPUNSPSC) =="**no_UNSPSC_available**" ? (DT_STR,20,1252)NULL(DT_STR,20,1252) : (DT_STR,20,1252)TRIM(IPUNSPSC)
正如@RDFozz 在他們的評論中指出的那樣。
(DT_STR,20,1252)((IPUNSPSC) =="no_UNSPSC_available" ? NULL(DT_WSTR,20) : TRIM(IPUNSPSC))
三元運算符的
? :
行為並不像人們預期的那樣。您將兩個結果值轉換為 DT_STR ,但這不是 SSIS 獲取元數據的地方。相反,您需要將三元運算符的整個結果轉換為給定類型。以下Biml生成一個範例 SSIS 包,其中包含一個 OLE DB 查詢以呈現 IPUNSPSC 列,然後是一個派生列組件以按預期操作數據。
<Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Connections> <OleDbConnection Name="SRC" ConnectionString="Provider=SQLNCLI11;Server=localhost\dev2016;Initial Catalog=tempdb;Integrated Security=SSPI;" /> </Connections> <Packages> <Package Name="dba_178090"> <Tasks> <Dataflow Name="DFT Demo"> <Transformations> <OleDbSource Name="OLESRC Query" ConnectionName="SRC"> <DirectInput>SELECT '**no_UNSPSC_available**' AS IPUNSPSC UNION ALL SELECT '***********************';</DirectInput> </OleDbSource> <DerivedColumns Name="DER Demo"> <Columns> <Column Name="Derived" DataType="AnsiString" Length="20" CodePage="1252">(DT_STR,20,1252)((IPUNSPSC) =="no_UNSPSC_available" ? NULL(DT_WSTR,20) : TRIM(IPUNSPSC))</Column> </Columns> </DerivedColumns> <!-- Placeholder transformation --> <DerivedColumns Name="DER Bit Bucket" /> </Transformations> </Dataflow> </Tasks> </Package> </Packages> </Biml>