我有一个数据流任务,它从一个数据库中提取数据并插入到 SQL Server 数据库中。在主行中插入每条记录后,我还需要将行插入到明细表中。明细表的数据非常简单,可以计算。
- 插入后如何检索标识列的值?
- 如何生成必须插入第二个表的行?我可以在脚本中执行此操作吗?
我是否需要在控制流级别使用 Foreach 循环来传输数据流任务中的父行,然后再使用另一个 Foreach 循环来插入详细记录?
我可以在脚本中执行所有详细信息行插入吗?这可能比放入 Foreach 循环更容易。
我有一个数据流任务,它从一个数据库中提取数据并插入到 SQL Server 数据库中。在主行中插入每条记录后,我还需要将行插入到明细表中。明细表的数据非常简单,可以计算。
我是否需要在控制流级别使用 Foreach 循环来传输数据流任务中的父行,然后再使用另一个 Foreach 循环来插入详细记录?
我可以在脚本中执行所有详细信息行插入吗?这可能比放入 Foreach 循环更容易。
这是一种方法..
创建一个对象类型的变量。
创建一个“执行 SQL 任务”来获取源数据并将其加载到变量 (ADO.NET) 中。
创建一个“ForEach 循环容器。
将 Success 连接器(绿色)从“Execute SQL Task”拖到“ForEach 循环容器”。将循环容器上的枚举器更改为“foreach ADO 枚举器”并从“ADO 对象源变量”中选择您的变量。
在您的循环中,您应该能够添加一个可以使用的“执行 SQL 任务”。
插入主表后,您应该能够使用 SCOPE_IDENTITY() 获取每个 ID,并使用该 ID 插入明细表。
我遇到了这个问题,规模更大(导入深度嵌套的 XML)。我能够利用 XML Source 的一个特性,它在主“表”中创建一个代理键,然后在“子”表中作为“外键”重复。
这个想法是允许每个“表”到达数据库中的一个单独的临时表。在处理完所有行之后,您可以使用这些“外键”进行任何需要同时创建主行和明细行的最终处理——必要时甚至在事务中。
这允许执行数据流任务,并结合数据的主从性质。
当我迁移在源中具有 ID 字段的数据时,我经常使用的一种技术是在目标主表中拥有一个名为“OldID”的列。使用将原始 id 字段放入 OldID 的 SSIS 控件填充它。然后是后续的 SSIS 控件对已填充的主记录执行查找,其中 OldID 与源 ID 匹配,并以这种方式获取新创建的 ID。