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

Windows CMD执行docker exec调用sqlcmd报DATABASE未知选项原因问询

错误原因
  • 核心是Windows CMD的引号解析规则差异:CMD仅将双引号"识别为合法的字符串包裹标记,单引号'没有特殊语义,不会被判定为整块参数的边界。
  • 你在命令中用单引号包裹-Q的SQL参数时,CMD会直接忽略单引号作用,按空格将整条SQL拆分为多个独立参数传递给sqlcmd。原本需要作为单个参数的ALTER DATABASE MyTest SET READ_COMMITTED_SNAPSHOT ON;GO被拆成'ALTER、DATABASE、MyTest等多段,sqlcmd解析时会将DATABASE识别为未知的命令选项,因此抛出对应错误。
  • 替换变量后在Docker CLI(通常为PowerShell或Linux Shell环境)运行正常,是因为这类环境均支持单引号作为字符串包裹符,会将单引号内的内容作为单个完整参数传递,不会出现拆分问题。
解决方案

将-Q参数后包裹SQL语句的单引号替换为双引号即可,修改后的CMD命令如下:

docker exec -it %containerName% /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P %dbPassword% -Q "ALTER DATABASE MyTest SET READ_COMMITTED_SNAPSHOT ON;GO"

如果SQL语句内部本身包含双引号,需要用两个连续的双引号""对内部双引号进行转义,避免CMD提前截断参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:54:07