[英]Bulk insert to SQL Server from Excel / CSV
我需要從 Excel 或 CSV 文件批量插入 SQL 服務器數據。 數據接近 100k 行。 我正在使用 C#/.NET。 在 Microsoft 文檔中,我發現:
BULK INSERT Sales.Invoices
FROM '\\share\invoices\inv-2016-07-25.csv'
WITH (FORMAT = 'CSV'
, FIRSTROW=2
, FIELDQUOTE = '\'
, FIELDTERMINATOR = ';'
, ROWTERMINATOR = '0x0a');
如果我有 Excel 文件,我可以將其轉換為 CSV 並使用它。 這很好用而且效率很高,但我的問題是我無法訪問 SQL 服務器上的文件系統。 有誰知道解決這個問題的最佳方法是什么,或者是否有更好的完全不同的方法?
我看到這個問題,比如客戶端出於某種原因想要將數據加載到其中一個數據庫表中。
之后,我將編寫一個文件夾來觀察 .NET 應用程序,該應用程序將讀取 CVS 或 Excel 文件並將數據導入數據庫表。 如果加載數據失敗,它應該將文件移動到帶有錯誤日志的“錯誤文件”文件夾。 如果成功,應用程序會將該文件移動到“已完成文件”。
這種方法的優點。
壞處
技術參考
您可以試用SqlBulkCopy
,允許您使用DataTable
將數據直接插入數據庫。
可以在此處找到更多信息: SqlBulkCopy.WriteToServerAsync 。
正如解釋的那樣,使用 SQLBulkCopy 似乎是一個非常好的解決方案
在這里,我們有這樣做的建議:
var lines = System.IO.File.ReadAllLines(@"d:\data.txt");
if (lines.Count() == 0) return;
var columns = lines[0].Split(',');
var table = new DataTable();
foreach (var c in columns)
table.Columns.Add(c);
for (int i = 1; i < lines.Count() - 1; i++)
table.Rows.Add(lines[i].Split(','));
var connection = @"your connection string";
var sqlBulk = new SqlBulkCopy(connection);
sqlBulk.DestinationTableName = "Table1";
sqlBulk.WriteToServer(table);
這是非常有效的,通過使用此代碼,我可以在不到 5 秒的時間內插入 100.000 條記錄,這是完全可以接受的性能。 直接 SQL SQL 服務器本身的批量插入當然更快,並且幾乎可以立即插入數據,但是在我的情況下這是不可能的,我們在這里有一個不錯的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.