在ssis派生列中混合整数和字符串

时间:2013-12-17 21:40:06

标签: ssis expression derived

我在创建一个我似乎无法弄清楚的派生列时遇到问题。这是简单的SQL,但在SSIS中我似乎无法做到。

基本上它正在检查大于零的值,并指定字符串结果。结果也需要包裹在一个字符串中。

示例:

“指标= \”“+ [IND]> 0?”CP“:”“+”\“”

应该屈服:

如果IND是20.00,则

指标=“CP” 要么 如果IND为0,则指示符=“”

我似乎无法将If / Then与字符串混合使用。有人有想法吗?

1 个答案:

答案 0 :(得分:4)

你走在正确的轨道上。我相信你要找的表达是

(DT_STR,2,1252)((IND > 0) ? "CP" : "")

如果IND的值大于零,则使用字符串CP;否则使用空字符串。该表达式将放置在派生列任务中。

SSIS中的字符串操作将导致Unicode字符串DT_WSTR作为返回类型。因此,我将表达式的整个结果包装为显式转换为带有(DT_STR, 2, 1252)调用的非unicode字符串类型。

如果NULL到达此表达式,则会在输出中导致NULL。这是否合适取决于你。如果不是,那么你需要测试它ISNULL([IND]),然后让它采取任何理解CP或空字符串的路径。

来源查询

我使用以下源查询创建了一个简单的包

SELECT 20.0 AS IND UNION ALL SELECT 0;

然后我将其输出输入到Derived Column中,该列使用上面定义的表达式,然后在其输出上放置一个数据查看器,以证明结果与期望值相匹配。

结果

我的包裹的截屏

enter image description here

BIML

对于那些在家中随行的人,您可以通过以下方式构建此程序包 1.将Biml文件添加到您的SSIS项目(安装BIDS Helper之后)并将以下内容粘贴到生成的文件中(覆盖现有声明)。 2.编辑ConnectionString的值以指向有效的SQL Server安装。 3.右键单击Biml文件并生成SSIS包将导致名为so_20645240

的包
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Connections>
        <!-- Change ConnectionString below. Privider if not 2012, Data Source for certain -->
        <OleDbConnection
            Name="Src"
            ConnectionString="Data Source=localhost\dev2012;Initial Catalog=tempdb;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;"
            />
    </Connections>
    <Packages>
        <Package Name="so_20645240" ConstraintMode="Linear">
            <Variables>
                <Variable Name="QuerySource" DataType="String">SELECT 20.0 AS IND UNION ALL SELECT 0; </Variable>
            </Variables>
        <Tasks>
            <Dataflow Name="DFT Source">
                <Transformations>
                    <OleDbSource Name="OLE_SRC Query" ConnectionName="Src"
                >
                    <VariableInput VariableName="User.QuerySource" />
                </OleDbSource>
                <DerivedColumns Name="DER Expressions">
                    <Columns>
                        <Column Name="Indicator" DataType="String" Length="2">(DT_STR, 2, 1252)(([IND] &gt; 0) ? "CP" : "")</Column>
                    </Columns>
                </DerivedColumns>
                </Transformations>
            </Dataflow>
        </Tasks>
        </Package>
    </Packages>
</Biml>