客戶/父關係的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合法嗎? 是的,了解原因