gpt4 book ai didi

sql-server - SSIS条件分割多个真实路径

转载 作者:行者123 更新时间:2023-12-02 00:45:23 24 4
gpt4 key购买 nike

我在 dtsx 包内有一个数据流,用于处理我需要处理的所有数据。最后,我需要执行一些清理任务。例如,假设以下结构:

What I'd like to do

如果所有 3 种情况的记录均为 true,那么我想运行所有三个 OLE DB 命令。如果记录仅适用于情况 1,那么它应该只运行情况 1。

我可以使用多播和 3 个单独的条件分割(如下所示)来做到这一点,但我希望有一种更干净的方法。有什么想法吗?

Possible alternative. Is there a better way?

最佳答案

使用多播和三个条件分割是最容易实现的,也可能是最容易理解的。

设置为具有三个输出的转换的脚本组件可能是下一个最容易实现的 - 但它将涉及大量设置和一定程度的编码。数据流看起来会比较漂亮:

enter image description here

对于每个输出,请确保将同步输入 ID 设置为(以便您可以控制何时创建行);那么您需要在每个输出中复制每个输入列。脚本代码本身如下所示:

public override void IncomingRows_ProcessInputRow(IncomingRowsBuffer Row)
{
if (Case1Logic(Row))
{
Case1OutputBuffer.AddRow();
Case1OutputBuffer.ProductId = Row.ProductID;
Case1OutputBuffer.Name = Row.Name;
// etc. for all columns
}
if (Case2Logic(Row))
{
Case2OutputBuffer.AddRow();
Case2OutputBuffer.ProductId = Row.ProductID;
Case2OutputBuffer.Name = Row.Name;
// etc. for all columns
}
if (Case3Logic(Row))
{
Case3OutputBuffer.AddRow();
Case3OutputBuffer.ProductId = Row.ProductID;
Case3OutputBuffer.Name = Row.Name;
// etc. for all columns
}
}

private bool Case1Logic(IncomingRowsBuffer Row)
{
// Whatever the Case 1 logic involves
}
private bool Case2Logic(IncomingRowsBuffer Row)
{
// Whatever the Case 2 logic involves
}
private bool Case3Logic(IncomingRowsBuffer Row)
{
// Whatever the Case 3 logic involves
}

当人们决定要更改列时,保持最新状态会很有趣!

如果这对您来说还不够复杂,您可以编写自己的自定义转换。关于如何做到这一点的详细细节在 MSDN 中。 ;可以说,将会涉及更多更多代码。您还将学到更多有关 SSIS 如何处理缓冲区管理的知识,这可能反过来解释了为什么开箱即用的条件拆分不允许您将同一行发送到多个输出。

最后,如果您想要一个真正丑陋的解决方案,同时也是维护的噩梦,请尝试构建一个条件拆分,为每种情况组合提供一个输出。将 Union All 转换放在每个 OLE 目标前面。将情况 1、2 和 3 输出定向到三路多播,其中一个多播输出发送到三个 Union All 转换中的每一个。条件分割的情况 1 和 2情况 2 和 3 以及 情况 1 和 3 输出将分别进行双向多播转换(这将反过来馈送到适当的 Union All),而 Case 1Case 2Case 3 输出将直接进入适当的联盟所有。它看起来像这样:

enter image description here

总而言之,我认为您最初的想法是最简单的,也可能是最好的。

关于sql-server - SSIS条件分割多个真实路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15285566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com