我有一个必须多次执行 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 分钟。
我想知道如何改进我的代码。如果最好使用不同的方式来实现目标,我也欢迎任何建议。