У меня есть удаленный 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. Есть ли более быстрый способ получить эти объекты в файл? (Не должен быть текстовый файл Binary локального файла базы данных также хорошо.)
Возможно, вы можете выполнить эти операции в запросе T-SQL, чтобы он возвращал все, отформатированные в CSV, вместо того, чтобы проходить через каждую запись на C#. – Alexandre
Почему бы просто не прокрутить данные один раз и выполнить преобразование строк и запись файлов при чтении каждой строки из вашего запроса? – mbeckish
Мое предположение заключается в том, что самым быстрым механизмом будет использование [объемной экспортной функции SQL Server] (http://msdn.microsoft.com/en-us/library/ms175937.aspx). Есть утилита bcp.exe, которая, похоже, делает именно то, что вы хотите сделать. –