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

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

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

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

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

请在此处编写您的自定义语句。正如您从下面的屏幕截图中看到的,我们正在编写一个 Select 语句来选择 Employee 表中存在的所有记录。
SELECT [FirstName]
,[LastName]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
,[HireDate]
FROM [Employee]

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

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

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

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

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

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

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

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

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

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

我们在上面的屏幕截图中使用的命令是
SELECT 1 AS RowNumber
接下来,双击或右键单击 Derived Column Transformation 以根据变量添加新列。首先,让我为 FirstName 变量添加一个新列。
正如您从下面的屏幕截图中看到的,我们正在使用 Type Cast 函数 DT_STR 将变量值转换为长度为 50 的字符串类型。

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

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

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

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

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

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

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