簡體   English   中英

將SQL Server表寫入文件的快速方法

[英]Fast way of writing SQL server table into file

我有一個遠程SQL Server。 我想在此服務器中制作所有表的本地副本。 我不關心本地使用的文件格式,我正在尋找從SQL服務器獲取數據到文件的最快方法。 (注意:服務器端備份不是一個選項)

這是我目前的做法:

第1步 創建閱讀器並將所有數據讀入對象列表

while (reader.Read()) {

    var fieldCount = reader.FieldCount;
    for (int i = 0; i < fieldCount; i++) {
        objects.Add(reader.GetValue(i));
    }
}

第2步 將對象轉換為字符串

List<string> test = new List<string>();
foreach (var o in objects) {
    test.Add(o.ToString());
}

第3步 將字符串寫入(CSV)文件

foreach (var s in test) {
    backupFile.Write("\"");
    backupFile.Write(s);
    backupFile.Write("\";");
}

我已經測量了這三個步驟的性能:

  • 第1步需要3秒鍾
  • 第2步需要2.8秒
  • 第3步需要0.8秒

我正在尋找加快步驟2的方法。有沒有更快的方法將這些對象添加到文件中? (不必是文本文件。本地數據庫文件的二進制文件也可以)

你為什么要完全打擾三個步驟。

為什么不

while (reader.Read()) {

    var fieldCount = reader.FieldCount;
    for (int i = 0; i < fieldCount; i++) {
           backupFile.Write("\"");
           backupFile.Write(reader.GetValue(i).ToString());
           backupFile.Write("\";");;
    }
    backupFile.WriteLine();
 }

除非你當然使用兩個線程。 將數據推送到集合中的一個。 並將數據刷新到文件中。

如果您不關心本地使用的文件格式,如何將SQL表加載到DataTable對象並使用:

datatable.WriteXml("c:\YourFile.xml");

使用OPENROWSET命令。 例:

INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=C:\testing.xls;', 
'SELECT Name, Date FROM [Sheet1$]') 
SELECT [Name], GETDATE() FROM MyTable

暫無
暫無

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

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