sqlcmd默认是否等待脚本执行?指定参数调用时是否等待执行完成再退出?
sqlcmd 默认是否会等待脚本执行完成?
我可以明确告诉你:默认情况下,sqlcmd 会等待传入的 Transact-SQL 脚本文件完全执行完成后才会退出进程,不会出现启动脚本后立即结束的情况,这和你在 MSDN 上查到的结论一致。
结合你使用的参数来具体分析:
string parameter = $"-S {data.DataSource} -d {data.InitialCatalogue} -b -E -I -i \"{file}\"";
你用到的这些参数都不会改变 sqlcmd "等待脚本完成" 的默认行为:
-b:仅作用于错误处理,当脚本执行出错时返回非0的退出码,方便你判断执行结果,不影响执行等待逻辑-E:使用 Windows 身份验证连接 SQL Server,和脚本执行的等待机制无关-I:启用带引号的标识符,属于语法解析层面的设置,不改变脚本的执行流程-i:指定要执行的目标脚本文件,这正是让 sqlcmd 加载并逐行执行脚本的核心参数,sqlcmd 会在该脚本的所有语句执行完毕后才终止进程
举个简单的例子:如果你的脚本里包含 WAITFOR DELAY '00:00:10' 这样的延迟语句,sqlcmd 会实实在在等待10秒,直到这条语句执行完成,才会退出并让你的 CommandRunner.Execute 调用继续后续逻辑。
唯一需要注意的例外是:如果你的脚本中主动使用了 SQL Server 的异步执行机制(比如异步存储过程调用),但这种情况下 sqlcmd 依然会等待当前脚本中所有提交的语句执行完成,只是异步任务本身可能在 sqlcmd 退出后继续在 SQL Server 后台运行——但这属于 SQL Server 端的行为,和 sqlcmd 本身的等待逻辑无关。
内容的提问来源于stack exchange,提问作者skolldev
相关产品推荐
相关产品推荐

