SSIS 中的全外连接

SSIS 中的全外连接与 SQL 中的 Full join 类似,它返回左表和右表中存在的所有记录。所有不匹配的行将用 NULL 值填充。

在本文中,我们将使用 SSIS Merge Join Transformation 来执行全外连接。请参阅 Left Outer 文章了解如何使用 Merge Join Transformation 执行左外连接。并参阅 Right Outer 文章了解如何执行右外连接。

在我们开始创建包之前,让我们看看我们将要执行 SSIS 全外连接的两个源表,方法是使用 Merge Join Transformation。

Employees 表在以下数据库中是

Left Table 1

数据库中的 Department 表是

Right Table

SSIS 合并连接示例中的全外连接

要在 SSIS 中执行全外连接,请将数据流任务从工具箱拖放到控制流区域。接下来,将其重命名为在 SSIS 中使用合并连接转换执行全外连接。

Full Outer Join Using Merge Join Transformation in SSIS 1

双击数据流任务将在数据流区域打开它。

将两个 OLE DB 源 从工具箱拖放到数据流区域。然后双击数据流区域中的第一个 OLE DB 源将打开连接管理器设置。它提供了选择包含源数据的表的选项。

Full Outer Join in SSIS Using Merge Join Transformation 3

从上面的屏幕截图,您可以看到我们从数据库中选择了 [Employees] 表。

单击列选项卡以验证列并取消选中不需要的列。

Full Outer Join in SSIS Using Merge Join Transformation 4

双击第二个 OLE DB 源以配置第二个表以执行合并连接。在这里,我们从数据库中选择 [Department] 表。

Full Outer Join in SSIS Using Merge Join Transformation 5

单击列选项卡以验证列。

OLE DB Source Editor Columns Tab

在应用 SSIS 全外连接之前,我们必须使用排序转换。因此,将两个 排序转换 从工具箱拖放到数据流区域。接下来,将 OLE DB 源输出箭头连接到排序转换。

Full Outer Join in SSIS Using Merge Join Transformation 7

双击排序转换进行配置。勾选我们想要排序的列,并且不要忘记“传递”剩余的列。如果您忽略它们进行“传递”,它们将不会出现在输出列中。

从源数据中,DepartID 是 Employees 和 Department 表之间的连接键。因此,我们按升序对 Employees 表按 DepartID 进行排序。

Full Outer Join in SSIS Using Merge Join Transformation 8

提示:合并连接转换在没有对输入行进行排序的情况下将无法工作。因此,在应用合并连接转换之前,排序转换是必需的。

双击排序转换 1,并使用 id 列按升序对 Department 表进行排序。

Full Outer Join in SSIS Using Merge Join Transformation 9

SSIS 全外连接

现在将合并连接转换拖放到数据流区域,以在排序表上执行 SSIS 中的全外连接。

当您将排序转换的输出箭头拖到合并连接转换时,会出现一个输入输出选择窗口,用于选择它是合并连接左输入还是合并连接右输入。

Full Outer Join in SSIS Using Merge Join Transformation 10

这里我们为 Employees 表选择了合并连接左输入。单击确定并拖放排序转换 1 的输出箭头。这里合并连接右输入会自动被智能选中。

双击合并连接转换将打开合并连接转换编辑器进行配置。

连接类型提供了一个下拉列表,用于选择您要在源数据上执行的连接类型(例如 内连接、左外连接和 SSIS 全外连接)。在此示例中,我们执行 SSIS 全外连接。这就是为什么我们从连接类型选项中选择了 全外连接 选项。

Full Outer Join in SSIS Using Merge Join Transformation 2

正如您从源数据中知道的,Employees 和 Department 表都使用 DepartID 和 id 列连接。因此,通过拖动箭头选择它们作为 SSIS 全外连接的连接键。

现在通过勾选列名来选择您想要发送到目标表的列(传递的列)。

Full Outer Join in SSIS Using Merge Join Transformation 3

从上面的屏幕截图,您可以看到,我们选择了 [First Name]、[Last Name] 和 [Department Name] 列作为输出列。

这意味着 SSIS 全外连接将产生 [First Name]、[Last Name] 和 [Department Name] 列中的所有行。所有不匹配的行都视为 NULL。

提示:您在此处选择的任何列都只会存储在目标表中。如果您不想要任何列,则取消选中该列。

步骤 10:将 OLE DB 目标 拖放到数据流区域,然后双击它以配置目标服务器和目标表以存储合并连接转换的输出。

Select the Destination database and Table

在这里,我们选择了数据库和 [使用合并连接转换的全外连接] 作为目标表。

步骤 11:单击列选项卡以检查输入列是否与目标列匹配。如果不匹配,请将相应的列分配给目标列。

Full Outer Join in SSIS Using Merge Join Transformation 12

我们完成了 SSIS 中执行全外连接的合并连接转换包的设计。让我们执行该包。

Full Outer Join in SSIS Using Merge Join Transformation 5

现在让我们打开 Management Studio 并从 [使用合并连接转换的全外连接] 表中选择列。

Full Join Destination Table