私はリモート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)に文字列を書き込み、私はこれらの3つのステップのパフォーマンスを測定しました
foreach (var s in test) {
backupFile.Write("\"");
backupFile.Write(s);
backupFile.Write("\";");
}
ファイル:
- ステップ1、ステップ2は、2.8秒 をとる3秒
- を取ります
- ステップ3は0.8秒かかる
私はステップ2をスピードアップする方法を探しています。これらのオブジェクトをファイルに素早く取得する方法はありますか? (テキストファイルである必要はありません。ローカルデータベースファイルのバイナリもOKです)
おそらくT-SQLクエリでこれらの操作を実行して、C#の各レコードを調べる代わりにCSV形式のすべてを返すことができます。 – Alexandre
なぜデータを1回ループするだけでなく、クエリから各行を読み込むときに文字列変換とファイル書き込みを行うのはなぜですか? – mbeckish
私の推測では、SQL Serverの[一括エクスポート機能](http://msdn.microsoft.com/en-us/library/ms175937.aspx)を使用するのが最も速いメカニズムだと思います。 bcp.exeユーティリティがあります。これは、あなたがやりたいこととほぼ同じように見えます。 –