客户/父关系的SQL Bulkcopy

时间:2009-12-02 15:23:59

标签: .net sql-server sqlbulkcopy

我们在.NET应用程序中有2个DataTable,它们具有数百万行的客户/父关系。 应通过SQL BulkCopy将此数据插入SQL Server数据库。这个.NET应用程序的多个实例可能并行运行,将不同的数据插入到同一个表中。

自动生成主键我们在父表中有一个标识列。

问题是我们不知道如何将相应的外键插入子表。

有人知道如何使用bulkcopy解决这个1:N关系问题吗?我们无法在.NET中创建ID,因为可能会运行多个实例。

由于 丹尼尔

2 个答案:

答案 0 :(得分:0)

这只是为什么我更喜欢使用IDENTITY上的自然键来表示我的所有主键的众多原因之一。

您如何知道哪些孩子会转到数据源中的哪个家长?如果它们通过列链接,那么它应该不会太难。插入父行,将子行插入到临时表中,然后在连接到该列上的父项时插入子行以获取ID。

如果关系仅仅是文件中的相对位置或类似的关系,则变得更加困难。您可以包含文件行#,然后使用上面相同的步骤,加入那些(child.line_num> parent.line_num,并且这两个数字之间没有其他parent.line_num)或者您可以一次导入一个父项在循环中,捕获ID,然后使用该ID插入其所有子项。你可以在SSIS中设置它而不会有太多麻烦,但它可能很慢。

有关您的问题的更多详细信息(数据源等),我可以提供更多细节。

答案 1 :(得分:0)

不确定您的数据在哪里,但这就是我接近这一点的方式。

  1. 使用一个或多个中间平面文件。
  2. 展平您的数据并分配主键。
  3. 为父表启用identity insert(表示跳过自动增量)
  4. 使用SSIS加载数据库,而不仅仅是批量复制。