在我的 SSIS 包中,我有一个带有 2 条语句的执行 SQL 任务:
声明1:
从 AAA 中选择 coalesce ( max (id), 0)+1 作为 ID
声明2:
插入 BBB (id) 值 (?)
在第一个语句中,我将结果保存到一个变量ID
中,在第二个语句中,我使用这个变量ID
插入到 BBB id 列中。假设第一个语句的结果应该是 4,但是,在我查询表 BBB 后,我发现插入到 BBB 中的是 0。
我在这里错过了什么吗?
在我的 SSIS 包中,我有一个带有 2 条语句的执行 SQL 任务:
声明1:
从 AAA 中选择 coalesce ( max (id), 0)+1 作为 ID
声明2:
插入 BBB (id) 值 (?)
在第一个语句中,我将结果保存到一个变量ID
中,在第二个语句中,我使用这个变量ID
插入到 BBB id 列中。假设第一个语句的结果应该是 4,但是,在我查询表 BBB 后,我发现插入到 BBB 中的是 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 值作为结果列的“名称”