0

我在源表中有 4 列。

源表:第 1 列、第 2 列、第 3 列、第 4 列

在源表的这 4 列中,我只想在目标表中插入 2 列。

目标表:有 A 列和 B 列

在 A 列和 B 列中插入值。现在我想在 SSIS 包中执行订单操作。

所以我想在 SSIS 有一个奥德逻辑。

如果第 1 列中有一个值,则在目标列 A 中使用该值,并将第 1 列的值插入到 A 列。因此,如果第 1 列中有值,则将插入目标表中的 A 列。

如果第 1 列中没有值,则检查源表中的第 2 列,如果第 2 列中有值,则将该值插入 A 列。

现在假设,第 1 列为空,第 2 列有值,第 2 列值将插入到目标表的 A 列中。

现在检查源中的第 3 列,看看是否有值,如果有值,则将该值插入到目标表的 B 列中。如果第 3 列中没有值,则从源检查第 4 列。

所以基本上按顺序(指定)和我们遇到的第一个值检查这 4 列,在目标 A 列和 B 列中使用它。

那里有一个棘手的部分,所以第一个非空值进入目标列 A,第二个非空值进入第二个目标列 B,我如何确定哪个是第二个非空值?

我想我们可以在 SQL 中执行此操作,但我想在 SSIS 包中执行此操作。

我将非常感谢您的帮助。先感谢您。

4

1 回答 1

0

虽然您可能可以通过派生列完成这项工作,但它会变得一团糟。这样的事情可以在脚本组件中更好地表达。

将脚本组件作为转换添加到您的数据流中。在 Input Rows 选项卡中,选择 cols 1-4 作为 ReadOnly。在输出选项卡中,将 2 个新列添加到输出缓冲区作为 A 列和 B 列,并确保将数据类型设置为与列 1-4 匹配。返回“常规”选项卡,单击“脚本”。

在您的ProcessInputRow方法中,您需要计算将分配给 A 和 B 的内容。以下代码是近似的。如果您需要原始的,请发表评论,当我在 PC 上时,我会修复它。

int firstNonNull = 0;
string colA = string.Empty;
string colB = string.Empty;

// Assign a value for colA and remember
// where we found it
if (!Row.Col1_IsNull)
{
    firstNonNull = 1;
    colA = Row.Col1;
}
else if (!Row.Col2_IsNull)
{
    firstNonNull = 2;
    colA = Row.Col2;
}
// Question does not address whether we will find
// non null values in 2 columns exactly
// assuming not
else if (!Row.Col3_IsNull)
{
    firstNonNull = 3;
    colA = Row.Col3;
}
else if (!Row.Col4_IsNull)
{
    firstNonNull = 4;
    colA = Row.Col4;
}

// Now to assign a value for B
// Assume that the next column after the first non null is populated
// otherwise, repeat above process
switch (firstnonNull)
{
    case 1:
        colB = Row.Col2;
        break;
    case 2:
        colB = Row.Col3;
        break;
    case 3:
        colB = Row.Col4;
        break;
    // Now what?

}

一个更聪明的人可以将所有值弹出到 List 或其他东西中,然后找到前两个非空值或其他方式,但这对于维护来说非常简单。

于 2013-09-17T04:08:56.337 回答