【问题标题】:Record rows updated through SSIS execute task通过 SSIS 执行任务更新的记录行
【发布时间】:2018-01-25 11:53:41
【问题描述】:

我有一个包连接到SourceDB1 并执行更新 DestDB2 的更新语句。现在我有许多具有相似结构的源数据库和目标数据库。为此,我为每个循环容器设置了执行 SQL 任务。现在,由于 sourceDB 连接不同,我创建了一个名为 SourceConnString 的变量。同样,更新查询也在名为UpdateVariable 的变量中。我创建了UpdateVariable,因为源和目标是两个不同的数据库。

现在我需要保存每次执行 sql 任务中更新的记录数。记录计数应插入到表或平面文件中,无论哪个容易。

我看到了如何在不使用通过变量更新的情况下做到这一点的教程。在我的情况下,有什么方法可以返回行数。

【问题讨论】:

  • 你有没有考虑在执行sql任务中使用@@rowcount函数?
  • 我没有使用它,因为Execute SQl任务中的SqlSourceType是一个变量。
  • 我应该在变量中使用@@rowcount 以及更新查询吗?你认为它会起作用吗?
  • 它应该可以工作,我会说在数据库中使用默认的 getdate() 创建一个表,并计算列数。将@@rowcount 的值插入表中。
  • 您可以使用@@RowCount,检查我在回答中提供的链接。它包含一个分步教程

标签: sql sql-server ssis etl rowcount


【解决方案1】:

您可以在 UPDATE 查询之后使用带有 @@ROWCOUNT 的 Select 查询,如下所示:

UPDATE SomeTable Set SomeColumn = SomeValue;

SELECT @@RowCount as NumberOfAffectedRecords

并使用单行结果集来获取值。

以下文章包含分步教程

【讨论】:

    【解决方案2】:

    您可以使用 ExecValueVariable 属性,在执行 SQL 任务中存储受 SQL 命令影响的记录数。您必须在 ExecValueVariable 属性中指定变量名称或从下拉列表中选择它,如下所示。

    【讨论】:

    • 即使我尝试了这种方法,也无法将 rowount 变量值插入到日志表中。
    • 您可以从SQL Task 中获取包含rowcount 的exec 变量值,并将其插入到另一个SQL 命令中。然后你可以执行它,在你的表中插入所需的值。 ExecVariable 本身可以让您更新行数;你决定下一步做什么。
    【解决方案3】:

    我做了以下事情。创建了一个新变量“Newupquery”,下面的代码 sn-p 是分配给这个变量的值,它在执行 SQl 任务中使用。


    DECLARE @UpdateRowCnt INT;
    update countcheck
    set [Base Unit of Measure] = 'PCS-1'
    where [Base Unit of Measure] = 'PCS';
    SELECT @UpdateRowCnt=@@ROWCOUNT;
    Select @UpdateRowCnt
    

    上面的execute SQl task被执行,结果集设置为变量“UpdateRowCount”。

    下一步是另一个执行 SQL 任务,它将变量 UpdateRowCount 的值插入到阶段服务器的日志表中。变量 UpdateRowCount 的值已使用 Execute SQl Task 中的参数设置传递给插入语句。

    【讨论】:

    • 这很奇怪。我的建议有什么不同?为什么将值分配给变量可以解决问题??
    • 即使我也有同样的担忧。我完全按照您发布的链接中的步骤进行操作。我得到 -1 或 0 作为行计数结果。当我检查表格时,更新了 100 行。
    • 真的我不知道为什么会这样,无论如何你必须将此答案标记为已接受。就算是你的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多