客户/父关系的SQL Bulkcopy

.net sqlbulkcopy sql-server

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

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

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

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

谢谢Daniel

一般承认的答案

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

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

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

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


热门答案

不知道你的数据在哪里,但这就是我接近这个的方法。

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



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因