SQLスクリプトを何度も実行しなければならないメソッドがあります。これらのスクリプトは、データベース上にテーブル、ビュー、ストアドプロシージャ、および関数を作成するために使用されます。私は100個のファイルでうまく機能するこのコードを思いついた。
foreach (var folder in ActivityConstant.SourceFolders)
{
var destination = context.GetValue(this.DestinationPath) + folder;
// TODO: Execute all sql folders instead of each sql file.
// this is cmd command for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"
foreach (var file in Directory.GetFiles(destination))
{
var begin = DateTime.Now;
context.TrackBuildWarning(string.Format("Start exec sql file at {0}.",
DateTime.Now));
Process process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.FileName = "sqlcmd.exe";
process.StartInfo.Arguments = string.Format("-S {0} -d {1} -i {2} -U {3} -P {4}",
sqlServerName,
databaseName,
file,
sqlUserName,
sqlPassword);
process.StartInfo.WorkingDirectory = @"C:\";
process.Start();
//process.WaitForExit();
context.TrackBuildWarning(
string.Format(
"Finished exec sql file at {0} total time {1} milliseconds.",
DateTime.Now,
DateTime.Now.Subtract(begin).TotalMilliseconds));
}
}
今、私は次のステップに進んでいます。約600個のファイル(テーブル、ビュー、ストアドプロシージャ、関数)を含むデータベースでテストしていますが、現在のコードではこのような大量のクエリを処理できないようです。
私が記録を持っている限り、約100個のファイルを実行するのに3〜5分かかります。私がこの質問を書いているとき、それらの600個のファイルは40分でした。
コードを改善するにはどうすればよいですか。また、目標を達成するために異なる方法を使用する方がよい場合は、提案を歓迎します。