ac# アプリケーションを使用して多数のデータ行をデータベース (SQL 2008 R2) にコミットするコードに問題があります。
私が今行っていることは、データベースに挿入する必要がある約 40.000 行を含むかなり大きな XML ファイル (約 30Mb) を作成していることです。
変数としてデータベースに渡すこの xml ドキュメントから、データを読み取り、適切な挿入または更新を行うストアド プロシージャがあります。
疑似 c# コード:
String xml = xmlWriter.ToString();
SqlCommand cmd = new SqlCommand("sp_CommitData", connection)
cmd.Variables.AddWithValue("@xml", xml);
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
/* Read return data */
}
疑似 tsql コード:
INSERT INTO DataTable
xmldata.value('@uID','[uniqueidentifier]') AS [uID]
FROM<
@xml.nodes('/data/m/r') [xmldata](xmldata)
このアプローチは過去に私にとってはかなりうまくいきましたが、今ではアプローチが機能するにはデータが膨大に見えます...データをコミットするだけで3分以上かかり、それは長い道のりです。:(
これは非常に一般的な問題に違いありません。同様のシナリオで皆さんはどのように対処しますか? C# でかなり大量のデータをコミットする方法について何か良い指針はありますか。ソリューションはスレッドセーフでなければならないので、私は bcp や同様のアプローチにはあまり興味がありません。
よろしく ドリュー