SSIS 中执行 SQL 任务(完整行集)

演示如何使用 SSIS 执行 SQL 任务,通过示例从 SQL 服务器返回完整的行集(或整个表)。它还将演示“结果集”选项“完整行集”。为此,我们将使用数据库中的 Employee 表

在开始描述 SSIS 执行 SQL 任务完整行集之前,让我向您展示我们将用于此示例的 Employee 表

SSIS 中执行 SQL 任务(完整行集)

在此示例中,我们将使用 SSIS 执行 SQL 任务的完整行集选项来选择 Employee 表中的数据,并将返回的结果集保存在另一个表中。为此,请将 SSIS 工具箱中的“执行任务”拖放到设计器空间中。

Execute SQL Task in SSIS Full Row Set 2

在开始配置之前,让我创建存储返回记录所需的变量。为此,右键单击设计区域将打开上下文菜单。请选择“变量”选项。

Create Variable to Execute in Full Row Set 3

从下面的屏幕截图中可以看到,我们创建了 8 个变量。在此,类型为 object 的 ResultSet 变量将保存返回的结果集,其余七列将在另一个任务中使用。

Variables for Execute Task in Full Row Set 4

现在,双击“执行 SQL 任务编辑器”将打开编辑器进行配置。让我将连接类型选择为 OLE DB 连接,它连接到数据库。接下来,我们将使用“直接输入”作为 SQL 语句,因此单击...按钮来编写自定义命令。

Execute SQL Task in SSIS Full Row Set 5

请在此处编写您的自定义语句。正如您从下面的屏幕截图中看到的,我们正在编写一个 Select 语句来选择 Employee 表中存在的所有记录。

SELECT [FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [Employee]
Enter Transact Query

请将 SSIS 执行 SQL 任务的“结果集”属性值从“无”(默认)更改为“完整结果集”。

Execute SQL Task in SSIS Full Row Set 7

接下来,转到“结果集”选项卡,然后单击“添加”按钮为返回集分配变量。

Add Result Set

正如我们之前所说,select 语句将返回一个完整的表。因此,我们将 object 变量(ResultSet 变量)作为结果变量。

Choose Object Variable Name 9

到目前为止,我们已成功配置了执行 SQL 任务。但是,我们打算将结果集保存在数据库中。为此,我们需要一个 For Each Loop 容器。所以,让我将 Foreach Loop Container 拖放到 Control Flow 区域

Execute SQL Task in SSIS Full Row Set 10

双击它将打开 Foreach Loop Editor 进行配置。请导航到“集合”选项卡,然后选择“枚举器”为 Foreach ADO Enumerator。接下来,将 Object 变量(ResultSet)选择为 ADO Object 源。我们将为 Foreach ADO Enumerator 制作一个单独的文章,所以请严格按照步骤操作。

Foreach ADO Enumerator 11

接下来,我们必须映射变量,因此请导航到“变量映射”选项卡。

Foreach Loop Editor for execute task 12

我们的 ResultSet 将从 Employee 表返回七列。因此,我们将先前创建的用户变量分配给这七列。

Variable Mapping in Foreach Loop Editor

单击“确定”关闭 Foreach Loop 容器。接下来,将 Data Flow 任务拖放到 Foreach Loop 中。

Execute SQL Task in SSIS Full Row Set 14

双击 Data Flow Task 将打开数据流选项卡。将 OLE DB Source、Derived Column Transformation 和 OLE DB Destination 从工具箱拖放到数据流区域

Execute SQL Task in SSIS Full Row Set 15

双击 OLE DB source,并连接到数据库。接下来,我们选择 SQL Command 作为 Data access mode,并编写一个简单的命令。此命令返回 RowNumber 作为 Column,其值为 1。

Execute SQL Task in SSIS Full Row Set 16

我们在上面的屏幕截图中使用的命令是

SELECT 1 AS RowNumber

接下来,双击或右键单击 Derived Column Transformation 以根据变量添加新列。首先,让我为 FirstName 变量添加一个新列。

正如您从下面的屏幕截图中看到的,我们正在使用 Type Cast 函数 DT_STR 将变量值转换为长度为 50 的字符串类型。

Derived Column Transformation Editor 17

请也为其余变量添加新列。

Derived Column Expression Editor

接下来,双击 OLE DB Destination 以将这些新创建的列保存到数据库中。

Execute SQL Task in SSIS Full Row Set 19

目前,我们正在连接到数据库。我忘了在服务器中创建一个表,所以,让我单击 New 按钮,以便 OLE DB Destination 编辑器会自动为我创建一个表。

OLE DB Destination 20

这是 Ole DB 生成的表。请记住,我们已从该定义中删除了不需要的 RowNumber 列。

Create a Table in Execute in Full Row Set 21

单击“映射”选项卡以检查源列是否已正确映射到目标列。

Columns Mapping 22

单击“确定”完成 SSIS 完整行集包中执行 SQL 任务的配置。让我们运行该包,看看是否通过执行 SQL 任务传输了数据

Execute SQL Task in SSIS Full Row Set 23

让我们打开 Server Management Studio 查询窗口来预览数据。