4

我有一个数据流任务,它从一个数据库中提取数据并插入到 SQL Server 数据库中。在主行中插入每条记录后,我还需要将行插入到明细表中。明细表的数据非常简单,可以计算。

  1. 插入后如何检索标识列的值?
  2. 如何生成必须插入第二个表的行?我可以在脚本中执行此操作吗?

我是否需要在控制流级别使用 Foreach 循环来传输数据流任务中的父行,然后再使用另一个 Foreach 循环来插入详细记录?

我可以在脚本中执行所有详细信息行插入吗?这可能比放入 Foreach 循环更容易。

4

3 回答 3

3

这是一种方法..

创建一个对象类型的变量。

创建一个“执行 SQL 任务”来获取源数据并将其加载到变量 (ADO.NET) 中。

创建一个“ForEach 循环容器。

将 Success 连接器(绿色)从“Execute SQL Task”拖到“ForEach 循环容器”。将循环容器上的枚举器更改为“foreach ADO 枚举器”并从“ADO 对象源变量”中选择您的变量。

在您的循环中,您应该能够添加一个可以使用的“执行 SQL 任务”。

插入主表后,您应该能够使用 SCOPE_IDENTITY() 获取每个 ID,并使用该 ID 插入明细表。

于 2009-03-27T18:21:26.310 回答
2

我遇到了这个问题,规模更大(导入深度嵌套的 XML)。我能够利用 XML Source 的一个特性,它在主“表”中创建一个代理键,然后在“子”表中作为“外键”重复。

这个想法是允许每个“表”到达数据库中的一个单独的临时表。在处理完所有行之后,您可以使用这些“外键”进行任何需要同时创建主行和明细行的最终处理——必要时甚至在事务中。

这允许执行数据流任务,并结合数据的主从性质。

于 2009-03-27T18:24:43.167 回答
0

当我迁移在源中具有 ID 字段的数据时,我经常使用的一种技术是在目标主表中拥有一个名为“OldID”的列。使用将原始 id 字段放入 OldID 的 SSIS 控件填充它。然后是后续的 SSIS 控件对已填充的主记录执行查找,其中 OldID 与源 ID 匹配,并以这种方式获取新创建的 ID。

于 2017-01-06T20:23:30.383 回答