You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:33:54