【问题标题】:SSIS How to pass variable/row count from one data flow process to another in the same control flowSSIS如何将变量/行计数从一个数据流过程传递到同一控制流中的另一个
【发布时间】:2021-02-03 15:12:36
【问题描述】:

对不起,我是 SSIS 的新手。使用 Visual Studio 2017。在我的 SSIS 包中,在我的控制流屏幕中,我只有一个数据流任务矩形,我将其标记为约会。当你点击它时,你会被带到数据流选项卡,这里真的发生了一切。我在这里有两个不同的过程或路径。所以对于路径 1,我有一个 OLE DB 源。这将运行一个 SQLSelect 语句,该语句从 SQL Server 的某些表中提取数据。然后有一个从这个到行计数转换矩形的绿色连接器,然后有一个从它到平面文件目标矩形的绿色连接器。 Flat File 目标设置为从 SQL 语句获取输出,在我的硬盘驱动器上创建一个文件,并将 Select 语句的结果放入该文件中。我将此文件称为“数据”文件。这就是这个过程。我希望以某种方式保存 Select 语句的记录数。现在,在同一个选项卡上,我有另一个进程,我们将调用路径 2。我有一个 OLE DB 源。在这个源代码中,我有一个 SQL Select 语句,它只创建一个包含 6 个字段的记录。除了一个之外,所有字段都是硬编码的。此字段称为 RecordCount。因此,需要动态进入该字段的是路径 1 的行数(现在,我只是将其硬编码为零)。我有一个来自这个 OLE DB 源的绿色连接器,它连接到平面文件目标矩形。这个目的地被设置为从(大部分)硬编码的 SQL 语句中获取输出,在我的硬盘驱动器上创建一个文件,并将该记录放入其中。我称这个文件为“控制”文件。我创建了 3 个连接管理器,一个连接到 SQL Server,一个用于此选项卡上的每个路径。如何将第一个路径的行数获取到由第二个路径创建的文件中的字段中?我尝试了几种可能性,并在谷歌上搜索,直到我脸色发青,但我什么也做不了。作为一个新手,我不敢告诉你我所尝试的一切——所以请随意提出任何建议,假设我一无所知。请记住,我将来可能会在同一个选项卡上创建路径 3 和路径 4,其中路径 3 的行数转到路径 4(不想在这里使用路径 1 的行数值)–这将如何影响事情?或者我是否需要路径 3 和路径 4 与控制流屏幕上的新数据流任务相关?

【问题讨论】:

    标签: variables ssis rowcount


    【解决方案1】:

    行计数转换需要一个 SSIS 变量。双击它,看看你放了什么值,比如@User::Variable

    当数据流结束时,该变量的值将包含通过组件的行数。

    这就是您想要的数据流。您描述的辅助路径,您需要将其添加到 new 数据流中。绘制从数据流 1 到数据流 2 的“完成时”箭头。对于未来的第 3 步和第 4 步也是如此。使数据流专注于解决单个业务问题(将销售导出为文本文件)。

    现在第一个数据流已经完成,SSIS 变量的值将包含一个值,因此您将在数据流 2 中使用该值将一行数据写入文本文件。

    在您的 OLE DB 源中,您将使用类似的参数

    DECLARE @RowCount int = ?;
    SELECT GETDATE() AS CurrentDate, 'SalesExport' AS ExportType, @RowCount AS ExportCount;
    

    ? 是 OLE DB 参数的占位符,如果单击“参数”按钮,您将能够指定该参数 0 映射到 @User::Variable

    运行时,您将获得一个包含一行数据和数据流 1 中计算的实际值的平面文件。

    起泡、冲洗、重复您的出口图案。请为您需要跟踪的每个行数创建一个 SSIS 变量,以便跟踪@User::CountSales@User::CountConsumers@User::CountProviders,这样您就不会在准备好之前重新使用变量而遇到麻烦。

    【讨论】:

    • 感谢您快速回复@billinkc。我按照您的步骤操作。我在控制流屏幕上有第二个流程作为新流程。在 OLE DB 源中,我有这行代码?作为记录计数。当我单击“参数”按钮时,我收到一条错误消息,提示“无法从 SQL 命令中提取参数...”我确实创建了一个变量,它是 User::RecordCount。我有它作为一个int32。让我知道你的想法。
    • @maxwell2323 很好,没有意识到无法确定数据类型会是一个问题。我已经更新了 TSQL 以提供一个类型化变量,该变量允许“设置查询参数”框按预期工作。
    • 谢谢...我正在取得进展。我再次按照这些步骤操作。但是当我运行包时,我得到了错误。该过程确实创建了平面文件,并给了我一个标题行。但仅此而已,它不显示一条记录。我将尝试显示错误语句 - 如果我能弄清楚如何在此处复制图像。
    • 好吧,图像不会复制过来(当然),所以我必须输入我看到的错误行。 ole DB 源历史约会控件 [20]] 错误:OLE DB 源历史约会控件出现错误。输出 [OLE DB 源输出]。列 [RecordCount]" 由于发生截断而失败...
    • 让我知道你的想法@billinkc
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多