簡體   English   中英

批量插入操作處理記錄,無錯誤

[英]Bulk insert operations process records without errors

據我了解,使用C#和SQL Server批量插入數據的最佳方法是使用表類型並傳入數據表。 我們當前的處理流程是一次處理/插入一個記錄(即使有成千上萬條記錄)的數據,以便我們能夠成功處理有效記錄並報告錯誤。 顯然,這是一個巨大的性能問題。

有什么方法可以進行大容量插入操作,以允許插入有效記錄而使無效記錄失敗? 如果是這樣,您如何確定哪些記錄已通過以及哪些記錄失敗或導致了錯誤?

我認為只有SSIS才能做到您所描述的。 我過去所做的是使用SQLXML將數據批量加載到SQL Server( https://msdn.microsoft.com/zh-cn/library/ms171993.aspx )。

基本上我所做的是:

  1. 創建與表結構相對應的XML模式並添加映射屬性(請參見https://msdn.microsoft.com/zh-cn/library/ms171721.aspx
  2. 使用XML模式從C#創建XML文件以對我的數據進行序列化
  3. 由於XML Bulk加載在BulkInsert之類的第一個錯誤中失敗,因此我不得不使用XMLReader解析XML文檔(串行支持大型XML文件),並根據架構對其進行驗證。 這樣,我知道哪些元素不符合架構,可以刪除它們並將它們存儲在另一個XML文件中。
  4. 將固定的XML文件批量加載到SQL Server表

因此,這里的主要I / O包括:具有一個讀取器流以讀取XML,並具有2個寫入器流以寫入有效和無效的XML文件,最后批量裝入有效的XML文件。

順便說一句,性能很棒(我可以在不到5分鍾的時間內在筆記本電腦上批量加載1GB文件,但這取決於磁盤速度和CPU)。 內存利用率非常低。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM