1

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

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

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

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

谢谢丹尼尔

4

2 回答 2

0

不确定您的数据在哪里,但这就是我的处理方式。

  1. 使用一个或多个中间平面文件。
  2. 展平您的数据并分配主键。
  3. 为父表启用identity insert(意味着跳过自动增量)
  4. 使用 SSIS 加载您的数据库,而不仅仅是批量复制。
于 2009-12-02T18:01:00.797 回答
0

这只是为什么我更喜欢对所有主键使用自然键而不是 IDENTITY 的众多原因之一。

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

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

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

于 2009-12-02T16:06:05.927 回答