【问题标题】:Passing query results to variable in SSIS将查询结果传递给 SSIS 中的变量
【发布时间】:2017-11-02 14:11:04
【问题描述】:

我有一个 SSIS 包,它运行执行 SQL 任务以获取行数,将其存储在变量中,然后使用脚本任务读取该变量并检查它是否大于 0。

我遇到的问题是,当我调试包时,它会将变量读取为 -1(我假设这只是 SQL 表示查询已成功执行),而不是数据库中的 38,000 多行。 据我所知,一切都已正确设置并以正确的方式编码,所以我不确定是什么原因造成的。

执行 SQL 任务设置:

脚本任务中的代码:

private byte[] emptyBytes = new byte[0];

    public void Main()
    {
        int rowCount = Convert.ToInt32(Dts.Variables["User::SMART_rowcount"].Value.ToString());

        if (rowCount > 0)
        {
            Dts.TaskResult = (int)ScriptResults.Success;
        }
        else
        {
            Dts.Log("The SMART Row Count Check has failed due to result set having no rows. Check table SMART.[SMART_SEC_MGMT_QUOTE_DATA].", (int)Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure, emptyBytes);
            Dts.TaskResult = (int)ScriptResults.Failure;
        }
    }

编辑:

以下是这些和变量的流程:

【问题讨论】:

  • 能否请您为解决问题添加一个包含这两个任务的流程屏幕以及一个包含包变量的屏幕?
  • @VladimirSemashkin 他们已经被添加了

标签: c# sql ssis


【解决方案1】:

在执行 SQL 任务的ResultSet 选项卡中,您不要将列名放在“结果名称”列中。您放置了从零开始的列索引。

因此,Result Name 下不应使用“Smart_Count”,而应使用“0”。

【讨论】:

  • 我尝试过使用 0、“0”和 [0],但没有任何形式的尝试指示从零开始的索引给了我不同的结果。我仍然在变量中看到 -1
【解决方案2】:

我不会为此使用脚本任务,而是在控制流上放置一个表达式。

@Smart_rowcount > 0 在主路径上。 和 @Smart_rount

【讨论】:

  • 脚本任务并不是这里的问题,我使用它是为了获得详细的自定义日志记录。问题是执行 SQL 任务将通过/失败指示符存储在变量中,而不是 COUNT 语句的结果
【解决方案3】:

所以我已经正确设置了所有内容,并且我的流程没有问题。为了解决这个错误,我删除了执行 SQL 任务,用所有完全相同的设置和所有内容重新创建它,现在它返回了正确的结果。

“您是否尝试将其关闭并重新打开?”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 2016-11-29
    • 2015-05-19
    • 1970-01-01
    相关资源
    最近更新 更多