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

如何在cmd.exe执行sqlcmd后将errorlevel输出至外部文件

好的,我来帮你搞定这个需求——要把sqlcmd执行后的errorlevel输出到外部文件,只需要调整CMD命令串,让它在执行完SQL脚本后自动把错误码写入指定文件就行。下面是具体的实现方案:

核心思路

sqlcmd执行完成后,CMD的%errorlevel%环境变量会被设置为它的返回码(0=成功,1=普通错误,2=严重错误等)。我们只需要在CMD命令的末尾追加一行输出命令,把这个值写入文件即可。

修改后的VB.NET代码

首先要注意:所有带空格的路径/名称都要用双引号包裹,避免CMD解析出错;另外你的-V参数需要补全具体的错误级别(比如-V 16,表示把严重级别≥16的错误标记为失败)。

' 替换成你的实际参数
Dim Server As String = "YourSQLServer"
Dim Databasename As String = "TargetDB"
Dim FileName As String = "C:\SQLScripts\YourScript.sql"
Dim ResultFile As String = "C:\Output\SQLResult.txt"
Dim ErrorLevelFile As String = "C:\Output\SQLErrorLevel.txt"

Dim strCmdText As String
' 构建CMD命令:执行sqlcmd后,立即把errorlevel写入指定文件
strCmdText = "/C sqlcmd -S """ & Server & """ -d """ & Databasename & """ -i """ & FileName & """ -o """ & ResultFile & """ -V 16 & echo %errorlevel% > """ & ErrorLevelFile & """"

' 启动CMD进程并等待执行完成(确保文件写入完毕)
Dim proc As System.Diagnostics.Process = System.Diagnostics.Process.Start("CMD.exe", strCmdText)
proc.WaitForExit()

' 可选:直接获取进程退出码,和文件里的结果是一致的
Dim exitCode As Integer = proc.ExitCode

关键细节解释

  1. 双引号转义:VB字符串里的双引号需要用两个""来转义,这样CMD才能正确识别带空格的路径/名称。
  2. &命令连接符:用&而不是&&,确保不管sqlcmd成功还是失败,都会执行输出errorlevel的命令。如果用&&,只有sqlcmd成功时才会写入错误码。
  3. WaitForExit():调用这个方法可以让你的VB程序等待CMD命令执行完毕,避免后续代码读取ErrorLevelFile时文件还没生成。

注意事项

  • 确保ErrorLevelFile所在的目录有写入权限,否则echo命令会失败。
  • sqlcmd的-V参数需要指定具体数值(比如1-25),原代码里只写了-V会导致命令报错,记得补全。

内容的提问来源于stack exchange,提问作者Jeseentha Francis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:32:40