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