SSIS 中的行计数转换

SSIS 中的行计数转换用于计算数据流通过的行数,并将最终计数存储在变量中。例如,如果我们想通知经理插入的行数,那么我们可以使用 SSIS 行计数转换来计数行。然后,使用脚本任务向经理发送电子邮件。

在 SQL Server Integration Services 中,行计数转换在源数据的最后一行通过此 SSIS 转换之前不会更新变量值。因此,我们无法在中间使用更新后的值。让我们设计一个包,以便我们能更好地理解此行计数转换。

SSIS 中的行计数转换示例

步骤 1:从工具箱将数据流任务拖放到控制流中,并将其重命名为 SSIS 中的行计数转换。

Data Flow Task 1

步骤 2:此转换仅将计数的行信息存储在变量中,因此在使用此转换之前,我们需要在“变量”选项卡中创建一个变量,并将整数变量添加到包中。

右键单击 SSIS 控制流区域,以打开带有多个选项的上下文菜单。从上下文菜单中选择“变量”选项以创建变量。

Variables 2

在这种情况下,我们选择创建一个名为 NumberOfRows 的整数类型变量,并将其值设置为 0。

SSIS Row Count Transformation 3

双击数据流任务以打开数据流选项卡。有关更多转换,请单击此处

步骤 3:从 SSIS 工具箱将 OLE DB 源、行计数转换拖放到数据流区域

SSIS Row Count Transformation 4

步骤 4:双击数据流区域中的 OLE DB 源。它将打开连接管理器设置,并提供编写 SQL 语句的空间。

OLE DB Source Editor 5

在上图中使用的 SQL 命令

USE AdventureWorksDW2014
GO

SELECT [EnglishCountryRegionName]
      ,[StateProvinceName]
      ,[City]
      ,[PostalCode]
      ,RESELLER.[UnitPrice]
      ,RESELLER.[ProductStandardCost]
      ,RESELLER.[TotalProductCost]
      ,RESELLER.[SalesAmount]
      ,RESELLER.[TaxAmt]
    
FROM [DimGeography]
  INNER JOIN [FactResellerSales] AS RESELLER ON
[DimGeography].[SalesTerritoryKey] = RESELLER.[SalesTerritoryKey] 
ORDER BY [EnglishCountryRegionName],[StateProvinceName]

步骤 5:单击“列”选项卡以验证列。在此选项卡中,我们也可以取消选中不需要的列。

Columns Mapping

点击确定

步骤 6:最后一步是配置行计数转换。双击 SSIS 行计数转换将打开一个小的行计数窗口,用于从下拉列表中选择用户定义的变量。在这里,我们选择已创建的变量(NumberOfRows)。

SSIS Row Count Transformation 7

或者,您也可以使用更传统的方法配置行计数转换。右键单击行计数转换,这将打开带有多个选项的上下文菜单。在这里,从中选择“显示高级编辑器”选项。

它打开了 SSIS 行计数转换的高级编辑器。在“组件属性”选项卡中,选择行计数编辑器中的 VariableName 属性,如下图所示,并将之前创建的变量(NumberOfRows)关联起来。

SSIS Row Count Transformation 9

步骤 7:转到控制流区域,并将脚本任务从工具箱拖放到控制流区域。然后,双击它进行配置。

SSIS Row Count Transformation 10

步骤 8:选择用户定义的变量作为读写变量

SSIS Row Count Transformation 11

步骤 9:点击确定,然后点击“编辑脚本”按钮以打开类文件

SSIS Row Count Transformation 12

在 Main 方法中键入以下几行代码

String Message = Dts.Variables["User::NumberOFRows"].Value.ToString();

MessageBox.Show(Message);
SSIS Row Count Transformation 13

注意:我在这里使用了 C# 编程语言代码,很抱歉 VB.Net 的朋友们。我希望你们能理解这段代码。

关闭类文件,然后运行 SSIS 行计数转换包。从下面的截图中,您可以看到它正在显示带有行数信息的 MessageBox。

SSIS Row Count Transformation 14

让我们看看数据流区域,以及 SSIS 行计数转换是否给出了正确的结果。

SSIS Row Count Transformation 15

请记住,在您单击“确定”按钮之前,脚本任务将一直处于运行模式。一旦您关闭了消息框,就会显示绿色的勾号。

SSIS Row Count Transformation 16

您可以看到消息框显示了通过该转换的行数。

注意:此行计数转换有一个输入和一个输出。它不支持错误输出。