Ssis

SSIS 派生列轉換為 DT_STR

  • June 26, 2018

為什麼我不能將它轉換為 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>

引用自:https://dba.stackexchange.com/questions/178090