У меня есть консольное приложение, которое использует утилиту sqlcmd.exe.
У меня есть большой файл SQL, который изменяет структуру таблиц и некоторые sql, которые создают хранимые процедуры.
Сначала я хочу применить модификации таблицы, а затем процедуры.
Я написал что-то вроде (для выполнения большого файла sql)
FileInfo file = new FileInfo( pathToBigSqlFile );
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} -U {2} -P {3} -i \"{4}\"",
server, dbname, user, password, file.FullName );
process.Start();
Хорошо, следующим шагом будет выполнение других файлов sql, которые создают хранимые процедуры.
Process process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
foreach ( FileInfo file in fi ) {
filename = Path.GetFileName( file.FullName );
Console.WriteLine( i + "/" + sum + " Executing file: " + filename );
i++;
process.StartInfo.FileName = "sqlcmd.exe";
process.StartInfo.Arguments = string.Format( "-S {0} -d {1} -U {2} -P {3} -i \"{4}\"",
server, dbname, username, password, file.FullName );
process.Start();
Console.WriteLine( "The file(s) has(have) been executed" );
}
}
Проблема в том, что выполняются некоторые хранимые процедуры. Поскольку эти хранимые процедуры ссылаются на некоторые столбцы, которые были изменены ранее путем выполнения первого кода (большого файла sql).
Если я запускаю только последний код без первого, тогда все работает, и все хранимые процедуры появляются в студии управления SQL.
Приведенные выше два кода выполняются асинхронно?
Можете ли вы помочь мне здесь? Есть ли возможность выпускать пулы с помощью утилиты sqlcmd.exe?