Steve Britton Asked: 2017-07-06 09:05:04 +0800 CST2017-07-06 09:05:04 +0800 CST 2017-07-06 09:05:04 +0800 CST SSIS 派生列转换为 DT_STR 772 为什么我不能将它转换为 DT_STR - 数据源是 WSTR,但这种转换不应该使输出 DT_STR 吗? (IPUNSPSC) =="**no_UNSPSC_available**" ? (DT_STR,20,1252)NULL(DT_STR,20,1252) : (DT_STR,20,1252)TRIM(IPUNSPSC) ssis ssis-expressions 1 个回答 Voted Best Answer billinkc 2017-07-13T08:17:09+08:002017-07-13T08:17:09+08:00 正如@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>
正如@RDFozz 在他们的评论中指出的那样。
三元运算符的
? :
行为并不像人们预期的那样。您将两个结果值转换为 DT_STR ,但这不是 SSIS 获取元数据的地方。相反,您需要将三元运算符的整个结果转换为给定类型。以下Biml生成一个示例 SSIS 包,其中包含一个 OLE DB 查询以呈现 IPUNSPSC 列,然后是一个派生列组件以按预期操作数据。