我有一个远程SQL服务器。我想在本服务器中创建一个本地所有表的副本。我不关心本地使用的文件格式,我正在寻找从SQL服务器获取数据到文件中的最快方法。 (注:服务器端备份是不是一种选择)将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("\";");
}
我已经测量的这些3个步骤的性能:
- 步骤1需要3秒
- 步骤2需要2.8秒
- 步骤3需要0.8秒
我正在寻找一种方法来加快步骤2。有没有更快的方式让这些对象到文件? (不必是一个文本文件,二进制本地数据库文件的也行。)
你很可能做在T-SQL查询的操作,以便它返回一切CSV格式,而不必去通过在C#中的每个记录。 – Alexandre 2012-02-22 15:37:40
为什么不循环一次数据,并且在您查询每行时进行字符串转换和文件写入? – mbeckish 2012-02-22 15:39:49
我的猜测是最快的机制是使用SQL Server的[批量导出功能(http://msdn.microsoft.com/en-us/library/ms175937.aspx)。有一个bcp.exe实用程序,它似乎完全符合你想要做的事情。 – 2012-02-22 15:42:29