将查询结果传递给SSIS中的变量

时间:2017-11-02 14:11:04

标签: c# sql ssis

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

我遇到的问题是,当我调试软件包时,它将变量读取为-1(我假设只是SQL说成功执行了查询),而不是38,000个行,即在DB中。 据我所知,一切都设置正确并以正确的方式编码,所以我不确定是什么原因造成的。

执行SQL任务设置: enter image description here enter image description here

脚本任务代码: enter image description here

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;
        }
    }

编辑:

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

enter image description here enter image description here

3 个答案:

答案 0 :(得分:1)

在执行SQL任务的ResultSet标签中,您不必在"结果名称"中添加列的名称。柱。您放置列的从零开始的索引。

所以没有" Smart_Count"在Result Name下,你应该有" 0"。

答案 1 :(得分:1)

我不会为此使用脚本任务,而是在控制流上添加表达式。

@Smart_rowcount>主路径为0。 和 @ Smart_rount< 1在日志路径上。

答案 2 :(得分:1)

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

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