2013-08-29 49 views
1

我使用SqlBulkCopy的身份關係的兩個DataTable,在僞我這樣做:如何批量插入具有

  • 使新員工的DataTable
  • 做出新EmployeeAddress的DataTable
  • 填入職員表但沒有指定employeeId,因爲它的身份
  • 填充EmployeeAddress數據表,但它包含一個employeeId字段
  • 通過這樣做兩次將兩個數據表寫入數據庫並且chan蔓莖表名:

using (var bulk = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity & SqlBulkCopyOptions.KeepNulls)) 
    { 
     bulk.BatchSize = 25; 
     bulk.DestinationTableName = "Employee"; 
     bulk.WriteToServer(employeeDataTable); 
    }  

如何指定第二個datable中的employeeId,使其與第一次插入的員工正確對齊?我讀取數據的方式是我一起閱讀員工和地址,因此插入所有員工然後返回並插入所有地址會有點痛苦。

我想知道是否有一個優雅的解決方案?

+0

您是否使用表格的自動標識? – ScottG

+0

是的,所以employeeId是由SQL自動生成的,我想創建一個員工和一個地址,但我不知道employeeid,直到員工在數據庫中創建並且SQL將其分配給一個 - 但要創建一個地址,我需要它屬於的employeeid。 – NibblyPig

回答

1

我不太確定這是多麼優雅,我想這是你自己決定的。我假設你有一個唯一的字段或員工數據中唯一的字段組合。

如果您在服務器上創建一個臨時表,你可以批量插入具有所有員工數據以及員工的地址信息的數據。

從登臺表中插入員工數據。然後從登臺表中加入員工表(以獲取新分配的ID)並插入員工地址數據。

最後放下暫存表。

一切都仍然是面向的,所以你應該有良好的表現。

+0

這款 – NibblyPig

+0

Im很酷,登臺表聽起來很不錯,假設每個員工可能有多個地址?你可以關閉身份插入,並在代碼端插入你自己的ID(這是一個一次性的事情還是生產運行的一部分?) – ScottG

+0

我想我可以做到這一點,它是如何早期階段這個項目會很大,但這也是需要考慮的事情。謝謝。 – NibblyPig