31

我在 C# 中创建了一个进程来执行sqlcmd /S <servername> /d <dbname> /E /i以运行创建表、视图、存储过程的 sql 脚本。

问题是执行完成后进程不会终止。我想知道如何在操作完成后立即终止 sqlcmd。

是否有任何我可以指定以立即终止进程的 sqlcmd 输入参数,或者我可以直接在 C# 中执行它?

更新

这是我用来执行该过程的 C# 代码。

foreach (var file in files)
{
    ////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(); // if I comment out this code it will execute much faster

    ////context.TrackBuildWarning(string.Format("Finished exec sql file at {0} total time {1} milliseconds.", DateTime.Now, DateTime.Now.Subtract(begin).TotalMilliseconds));
}

如您所见,我有评论说,如果我删除(或评论)process.WaitForExit()它会执行得更快。

4

3 回答 3

53

只需使用 -Q (大写)。

此命令选择“asd”并立即退出: sqlcmd -S (local) -Q "select('asd')"

于 2015-02-05T15:32:44.800 回答
3

简单地使用这个语法:

sqlcmd -q“退出(命令)”

于 2014-06-06T09:40:10.023 回答
1

您的 SQL 文件末尾是否有退出或退出?

有关 sqlcmd 命令,请参见此处

于 2012-10-05T03:41:05.527 回答