0

在我的 SSIS 包中,我有一个带有 2 条语句的执行 SQL 任务:

声明1:

从 AAA 中选择 coalesce ( max (id), 0)+1 作为 ID

声明2:

插入 BBB (id) 值 (?)

在第一个语句中,我将结果保存到一个变量ID中,在第二个语句中,我使用这个变量ID插入到 BBB id 列中。假设第一个语句的结果应该是 4,但是,在我查询表 BBB 后,我发现插入到 BBB 中的是 0。

我在这里错过了什么吗?

4

1 回答 1

0

运行第一条语句会为空表生成 1 的结果。

SSIS 中整数的默认值为 0。

这会让我相信您没有正确分配执行 SQL 任务的结果。

要么放入脚本任务以通过信息事件打印值

    public void Main()
    {
        bool fireAgain = false;
        string message = "{0}::{1} : {2}";
        foreach (var item in Dts.Variables)
        {
            Dts.Events.FireInformation(0, "SCR Echo Back", string.Format(message, item.Namespace, item.Name, item.Value), string.Empty, 0, ref fireAgain);
        }

        Dts.TaskResult = (int)ScriptResults.Success;
    }

或者在第二个 Execute SQL Task 上设置断点来识别变量的当前值。

如果该值设置正确,那么唯一剩下的故障点是第二个执行 SQL 任务,这意味着您没有映射变量。

由于您的代码示例使用问号?作为占位符,因此问题是连接管理器是 OLEDB(我们有一个基于零的序数系统)还是 ODBC(我们有一个基于一个的序数)。

如果第一步存在问题,那么请确保您使用了正确的 0/1 值作为结果列的“名称”

于 2021-06-30T00:13:48.250 回答